mirror of
https://github.com/correl/mage.git
synced 2024-12-25 03:00:15 +00:00
Merge branch 'fix_mana' into mana_cleanup
This commit is contained in:
commit
b08dfa48db
820 changed files with 41210 additions and 5085 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -18,6 +18,7 @@ Mage.Server.Plugins/Mage.Deck.Limited/target
|
|||
Mage.Server.Plugins/Mage.Game.CommanderDuel/target
|
||||
Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/target/
|
||||
Mage.Server.Plugins/Mage.Game.FreeForAll/target
|
||||
Mage.Server.Plugins/Mage.Game.MomirDuel/target
|
||||
Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/target
|
||||
Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/target
|
||||
Mage.Server.Plugins/Mage.Player.AI.DraftBot/target
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,85 @@
|
|||
NAME:Call the Spirits (WB)
|
||||
1 [C15:312] Barren Moor
|
||||
1 [C15:172] New Benalia
|
||||
1 [C15:140] Tainted Field
|
||||
1 [C15:165] Wayfarer's Bauble
|
||||
1 [C15:116] Black Market
|
||||
1 [C15:229] Terramorphic Expanse
|
||||
1 [C15:6] Dawn to Dusk
|
||||
1 [C15:281] Command Tower
|
||||
1 [C15:171] Scoured Barrens
|
||||
3 [C15:323] Plains
|
||||
3 [C15:324] Plains
|
||||
3 [C15:325] Plains
|
||||
1 [C15:155] Orzhov Signet
|
||||
1 [C15:142] Orzhov Cluestone
|
||||
2 [C15:326] Plains
|
||||
1 [C15:26] Karmic Justice
|
||||
1 [C15:3] Celestial Archon
|
||||
1 [C15:22] Kor Sanctifiers
|
||||
1 [C15:12] Ghostblade Eidolon
|
||||
1 [C15:201] Treasury Thrull
|
||||
1 [C15:108] Teysa, Envoy of Ghosts
|
||||
1 [C15:63] Phyrexian Reclamation
|
||||
1 [C15:236] Evolving Wilds
|
||||
1 [C15:2] Ajani's Chosen
|
||||
1 [C15:324] Secluded Steppe
|
||||
1 [C15:157] Underworld Coinsmith
|
||||
1 [C15:84] Vow of Duty
|
||||
1 [C15:109] Fallen Ideal
|
||||
1 [C15:25] Mesa Enchantress
|
||||
1 [C15:5] Banishing Light
|
||||
1 [C15:7] Celestial Ancient
|
||||
1 [C15:95] Death Grasp
|
||||
1 [C15:8] Dictate of Heliod
|
||||
1 [C15:114] Ancient Craving
|
||||
1 [C15:46] Karlov of the Ghost Council
|
||||
1 [C15:153] Orzhov Guildgate
|
||||
1 [C15:20] Monk Idealist
|
||||
1 [C15:250] Rogue's Passage
|
||||
1 [C15:26] Silent Sentinel
|
||||
1 [C15:68] Fate Unraveler
|
||||
1 [C15:15] Marshal's Anthem
|
||||
1 [C15:278] Vivid Marsh
|
||||
1 [C15:21] Open the Vaults
|
||||
1 [C15:279] Vivid Meadow
|
||||
1 [C15:55] Thought Vessel
|
||||
1 [C15:52] Sandstone Oracle
|
||||
1 [C15:67] Dreadbringer Lampads
|
||||
1 [C15:140] Vow of Malice
|
||||
1 [C15:152] Phyrexian Arena
|
||||
1 [C15:66] Doomwake Giant
|
||||
1 [C15:19] Deadly Tempest
|
||||
1 [C15:18] Daxos's Torment
|
||||
1 [C15:17] Corpse Augur
|
||||
1 [C15:16] Banshee of the Dread Choir
|
||||
1 [C15:274] Sol Ring
|
||||
1 [C15:82] Necromancer's Covenant
|
||||
1 [C15:73] Gild
|
||||
1 [C15:240] Ghost Quarter
|
||||
1 [C15:31] Sigil of the Empty Throne
|
||||
1 [C15:22] Thief of Blood
|
||||
1 [C15:213] Burnished Hart
|
||||
1 [C15:83] Underworld Connections
|
||||
1 [C15:67] Grave Peril
|
||||
1 [C15:16] Dawnglare Invoker
|
||||
1 [C15:6] Aura of Silence
|
||||
1 [C15:143] Temple of the False God
|
||||
4 [C15:331] Swamp
|
||||
3 [C15:332] Swamp
|
||||
1 [C15:53] Seal of Doom
|
||||
3 [C15:333] Swamp
|
||||
3 [C15:334] Swamp
|
||||
1 [C15:8] Shielded by Faith
|
||||
1 [C15:7] Righteous Confluence
|
||||
1 [C15:6] Oreskos Explorer
|
||||
1 [C15:4] Herald of the Host
|
||||
1 [C15:3] Cage of Hands
|
||||
1 [C15:3] Grasp of Fate
|
||||
1 [C15:18] Seal of Cleansing
|
||||
1 [C15:1] Bastion Protector
|
||||
1 [C15:161] Orzhov Basilica
|
||||
1 [C15:199] Lightning Greaves
|
||||
1 [C15:292] Crystal Chimes
|
||||
1 [C15:98] Nighthowler
|
||||
SB: 1 [C15:43] Daxos the Returned
|
|
@ -0,0 +1,84 @@
|
|||
NAME:Plunder the Graves (GB)
|
||||
1 [C15:33] Bloodspore Thrinax
|
||||
1 [C15:229] Terramorphic Expanse
|
||||
1 [C15:281] Command Tower
|
||||
1 [C15:278] Golgari Rot Farm
|
||||
1 [C15:39] Skullwinder
|
||||
1 [C15:38] Pathbreaker Ibex
|
||||
1 [C15:189] Overwhelming Stampede
|
||||
1 [C15:86] Indrik Stomphowler
|
||||
1 [C15:37] Great Oak Guardian
|
||||
1 [C15:35] Centaur Vinecrasher
|
||||
1 [C15:198] Satyr Wayfinder
|
||||
1 [C15:140] Mycoloth
|
||||
1 [C15:34] Caller of the Pack
|
||||
1 [C15:143] Tainted Wood
|
||||
1 [C15:204] Terastodon
|
||||
1 [C15:206] Tribute to the Wild
|
||||
1 [C15:327] Slippery Karst
|
||||
1 [C15:323] Polluted Mire
|
||||
1 [C15:166] Victimize
|
||||
1 [C15:90] Viridian Zealot
|
||||
1 [C15:238] Vulturous Zombie
|
||||
1 [C15:149] Golgari Guildgate
|
||||
1 [C15:118] Ambition's Cost
|
||||
1 [C15:189] Kessig Cagebreakers
|
||||
1 [C15:93] Putrefy
|
||||
1 [C15:236] Evolving Wilds
|
||||
1 [C15:75] Wall of Blossoms
|
||||
1 [C15:87] Primal Growth
|
||||
1 [C15:153] Phyrexian Plaguelord
|
||||
1 [C15:283] Wood Elves
|
||||
1 [C15:95] Viridian Emissary
|
||||
1 [C15:51] Phyrexian Rager
|
||||
1 [C15:320] High Market
|
||||
1 [C15:159] Acidic Slime
|
||||
1 [C15:199] Eldrazi Monument
|
||||
1 [C15:48] Mazirek, Kraul Death Priest
|
||||
1 [C15:262] Golgari Signet
|
||||
1 [C15:177] Lotleth Troll
|
||||
1 [C15:176] Korozda Guildmage
|
||||
1 [C15:86] Eternal Witness
|
||||
1 [C15:44] Extractor Demon
|
||||
1 [C15:196] Mulch
|
||||
1 [C15:115] Sever the Bloodline
|
||||
1 [C15:53] Butcher of Malakir
|
||||
1 [C15:239] Sakura-Tribe Elder
|
||||
1 [C15:66] Eater of Hope
|
||||
1 [C15:103] Altar's Reap
|
||||
1 [C15:277] Vivid Grove
|
||||
1 [C15:63] Champion of Stray Souls
|
||||
1 [C15:278] Vivid Marsh
|
||||
1 [C15:55] Thought Vessel
|
||||
1 [C15:85] Barter in Blood
|
||||
1 [C15:107] Rise from the Grave
|
||||
3 [C15:340] Forest
|
||||
3 [C15:341] Forest
|
||||
1 [C15:17] Corpse Augur
|
||||
3 [C15:342] Forest
|
||||
1 [C15:16] Banshee of the Dread Choir
|
||||
1 [C15:174] Jarad, Golgari Lich Lord
|
||||
1 [C15:274] Sol Ring
|
||||
1 [C15:165] Grisly Salvage
|
||||
1 [C15:307] Verdant Force
|
||||
1 [C15:203] Spider Spawning
|
||||
1 [C15:202] Cloudthresher
|
||||
1 [C15:22] Thief of Blood
|
||||
1 [C15:21] Scourge of Nel Toth
|
||||
1 [C15:20] Dread Summons
|
||||
1 [C15:140] Skullclamp
|
||||
3 [C15:331] Swamp
|
||||
4 [C15:332] Swamp
|
||||
1 [C15:164] Golgari Charm
|
||||
3 [C15:333] Swamp
|
||||
1 [C15:169] Jungle Hollow
|
||||
3 [C15:334] Swamp
|
||||
1 [C15:23] Wretched Confluence
|
||||
1 [C15:156] Grim Backwoods
|
||||
3 [C15:339] Forest
|
||||
1 [C15:139] Shriekmaw
|
||||
1 [C15:199] Lightning Greaves
|
||||
1 [C15:87] Blood Bairn
|
||||
1 [C15:130] Diabolic Servitude
|
||||
1 [C15:100] Bonehoard
|
||||
SB: 1 [C15:49] Meren of Clan Nel Toth
|
|
@ -0,0 +1,72 @@
|
|||
NAME:Seize Control (UR)
|
||||
1 [C15:32] Arachnogenesis
|
||||
1 [C15:76] Monk Idealist
|
||||
2 [C15:31] Warchief Giant
|
||||
2 [C15:30] Rite of the Raging Storm
|
||||
1 [C15:74] Marshal's Anthem
|
||||
1 [C15:281] Command Tower
|
||||
1 [C15:72] Karmic Justice
|
||||
1 [C15:71] Jareth, Leonine Titan
|
||||
1 [C15:162] Magmaquake
|
||||
1 [C15:70] Ghostblade Eidolon
|
||||
1 [C15:163] Mizzium Mortars
|
||||
1 [C15:126] Fate Unraveler
|
||||
2 [C15:78] Orim's Thunder
|
||||
1 [C15:205] Thelonite Hermit
|
||||
4 [C15:327] Island
|
||||
4 [C15:328] Island
|
||||
3 [C15:329] Island
|
||||
2 [C15:87] Blatant Thievery
|
||||
2 [C15:42] Arjun, the Shifting Flame
|
||||
1 [C15:41] Anya, Merciless Angel
|
||||
1 [C15:84] Vow of Duty
|
||||
1 [C15:151] Dragon Mage
|
||||
1 [C15:152] Earthquake
|
||||
2 [C15:274] Wayfarer's Bauble
|
||||
1 [C15:153] Faithless Looting
|
||||
1 [C15:275] Worn Powerstone
|
||||
2 [C15:111] Windfall
|
||||
1 [C15:276] Ancient Amphitheater
|
||||
1 [C15:236] Trygon Predator
|
||||
2 [C15:159] Hunted Dragon
|
||||
1 [C15:116] Black Market
|
||||
1 [C15:318] Vivid Grove
|
||||
1 [C15:11] Gigantoplasm
|
||||
1 [C15:55] Thought Vessel
|
||||
1 [C15:98] Mystic Retrieval
|
||||
1 [C15:10] Broodbirth Viper
|
||||
1 [C15:54] Seal of the Guildpact
|
||||
1 [C15:53] Scytheclaw
|
||||
1 [C15:140] Vow of Malice
|
||||
1 [C15:143] Breath of Darigaaz
|
||||
1 [C15:188] Kodama's Reach
|
||||
1 [C15:100] Plaxmanta
|
||||
1 [C15:101] Preordain
|
||||
1 [C15:59] Arbiter of Knollridge
|
||||
1 [C15:14] Mystic Confluence
|
||||
1 [C15:57] Ajani's Chosen
|
||||
1 [C15:13] Mirror Match
|
||||
1 [C15:12] Illusory Ambusher
|
||||
1 [C15:227] Melek, Izzet Paragon
|
||||
1 [C15:229] Necromancer's Covenant
|
||||
1 [C15:21] Scourge of Nel Toth
|
||||
1 [C15:64] Celestial Archon
|
||||
1 [C15:20] Dread Summons
|
||||
1 [C15:172] Word of Seizing
|
||||
2 [C15:61] Banishing Light
|
||||
1 [C15:250] Crystal Chimes
|
||||
2 [C15:29] Mizzix's Mastery
|
||||
3 [C15:330] Island
|
||||
1 [C15:28] Meteor Volley
|
||||
1 [C15:178] Chameleon Colossus
|
||||
1 [C15:9] AEthersnatch
|
||||
1 [C15:24] Awaken the Sky Tyrant
|
||||
4 [C15:335] Mountain
|
||||
1 [C15:67] Dawnglare Invoker
|
||||
3 [C15:336] Mountain
|
||||
3 [C15:337] Mountain
|
||||
1 [C15:139] Victimize
|
||||
1 [C15:217] Etherium-Horn Sorcerer
|
||||
3 [C15:338] Mountain
|
||||
1 [ISD:134] Charmbreaker Devils
|
||||
SB: 1 [C15:50] Mizzix of the Izmagnus
|
|
@ -0,0 +1,80 @@
|
|||
NAME:Swell the Host (GU)
|
||||
1 [C15:32] Arachnogenesis
|
||||
1 [C15:76] Monk Idealist
|
||||
1 [C15:31] Warchief Giant
|
||||
1 [C15:281] Command Tower
|
||||
1 [C15:160] Inferno Titan
|
||||
1 [C15:161] Magma Giant
|
||||
1 [C15:120] Diabolic Servitude
|
||||
1 [C15:121] Doomwake Giant
|
||||
1 [C15:165] Stoneshock Giant
|
||||
1 [C15:39] Skullwinder
|
||||
1 [C15:243] Wistful Selkie
|
||||
1 [C15:320] Vivid Meadow
|
||||
1 [C15:166] Sunrise Sovereign
|
||||
1 [C15:37] Great Oak Guardian
|
||||
1 [C15:36] Ezuri's Predation
|
||||
1 [C15:202] Spider Spawning
|
||||
1 [C15:34] Caller of the Pack
|
||||
3 [C15:327] Island
|
||||
3 [C15:328] Island
|
||||
3 [C15:329] Island
|
||||
2 [C15:44] Ezuri, Claw of Progress
|
||||
1 [C15:87] Blatant Thievery
|
||||
1 [C15:190] Loaming Shaman
|
||||
1 [C15:86] Bident of Thassa
|
||||
1 [C15:42] Arjun, the Shifting Flame
|
||||
1 [C15:270] Staff of Nin
|
||||
1 [C15:40] Verdant Confluence
|
||||
1 [C15:150] Disaster Radius
|
||||
1 [C15:197] Patagia Viper
|
||||
1 [C15:274] Wayfarer's Bauble
|
||||
1 [C15:276] Ancient Amphitheater
|
||||
1 [C15:156] Hamletback Goliath
|
||||
1 [C15:277] Barren Moor
|
||||
1 [C15:47] Kaseto, Orochi Archmage
|
||||
1 [C15:236] Trygon Predator
|
||||
1 [C15:159] Hunted Dragon
|
||||
1 [C15:115] Barter in Blood
|
||||
1 [C15:237] Underworld Coinsmith
|
||||
1 [C15:89] Blustersquall
|
||||
1 [C15:116] Black Market
|
||||
1 [C15:239] Biomantic Mastery
|
||||
1 [C15:119] Champion of Stray Souls
|
||||
1 [C15:55] Thought Vessel
|
||||
1 [C15:10] Broodbirth Viper
|
||||
2 [C15:180] Cobra Trap
|
||||
1 [C15:53] Scytheclaw
|
||||
1 [C15:97] Mulldrifter
|
||||
1 [C15:186] Indrik Stomphowler
|
||||
4 [C15:340] Forest
|
||||
1 [C15:142] Borderland Behemoth
|
||||
3 [C15:341] Forest
|
||||
1 [C15:221] Golgari Charm
|
||||
3 [C15:342] Forest
|
||||
1 [C15:188] Kodama's Reach
|
||||
1 [C15:101] Preordain
|
||||
1 [C15:266] Simic Signet
|
||||
1 [C15:15] Synthetic Destiny
|
||||
1 [C15:225] Lorescale Coatl
|
||||
1 [C15:13] Mirror Match
|
||||
1 [C15:12] Illusory Ambusher
|
||||
1 [C15:56] Command Beacon
|
||||
1 [C15:149] Desperate Ravings
|
||||
1 [C15:227] Melek, Izzet Paragon
|
||||
1 [C15:228] Mystic Snake
|
||||
1 [C15:107] Stolen Goods
|
||||
1 [C15:229] Necromancer's Covenant
|
||||
1 [C15:308] Smoldering Crater
|
||||
1 [C15:171] Warstorm Surge
|
||||
1 [C15:173] Acidic Slime
|
||||
1 [C15:130] Phyrexian Arena
|
||||
3 [C15:175] Bane of Progress
|
||||
1 [C15:29] Mizzix's Mastery
|
||||
2 [C15:330] Island
|
||||
1 [C15:133] Phyrexian Reclamation
|
||||
1 [C15:216] Epic Experiment
|
||||
1 [C15:217] Etherium-Horn Sorcerer
|
||||
4 [C15:339] Forest
|
||||
1 [C15:219] Gisela, Blade of Goldnight
|
||||
SB: 1 [C15:44] Ezuri, Claw of Progress
|
|
@ -0,0 +1,84 @@
|
|||
NAME:Wade into Battle (RW).
|
||||
1 [C15:195] Thundercloud Shaman
|
||||
1 [C15:275] Boros Garrison
|
||||
1 [C15:31] Warchief Giant
|
||||
1 [C15:229] Terramorphic Expanse
|
||||
1 [C15:175] Wind-Scarred Crag
|
||||
1 [C15:30] Rite of the Raging Storm
|
||||
1 [C15:275] Vivid Crag
|
||||
1 [C15:191] Stinkdrinker Daredevil
|
||||
1 [C15:281] Command Tower
|
||||
1 [C15:192] Sunrise Sovereign
|
||||
1 [C15:317] Forgotten Cave
|
||||
1 [C15:297] Fellwar Stone
|
||||
1 [C15:134] Earthquake
|
||||
1 [C15:104] Fumiko the Lowblood
|
||||
1 [C15:87] Borderland Behemoth
|
||||
3 [C15:323] Plains
|
||||
1 [C15:328] Smoldering Crater
|
||||
3 [C15:324] Plains
|
||||
3 [C15:325] Plains
|
||||
1 [C15:72] Magma Giant
|
||||
2 [C15:326] Plains
|
||||
1 [C15:209] Gisela, Blade of Goldnight
|
||||
1 [C15:160] Warstorm Surge
|
||||
1 [C15:93] Fall of the Hammer
|
||||
1 [C15:320] Drifting Meadow
|
||||
1 [C15:236] Evolving Wilds
|
||||
1 [C15:266] Ancient Amphitheater
|
||||
1 [C15:147] Boros Guildgate
|
||||
1 [C15:141] Disaster Radius
|
||||
1 [C15:15] Orim's Thunder
|
||||
1 [C15:324] Secluded Steppe
|
||||
1 [C15:41] Anya, Merciless Angel
|
||||
1 [C15:11] Crib Swap
|
||||
1 [C15:5] Banishing Light
|
||||
1 [C15:147] Inferno Titan
|
||||
1 [C15:319] Blasted Landscape
|
||||
1 [C15:43] Jareth, Leonine Titan
|
||||
1 [C15:318] Worn Powerstone
|
||||
1 [C15:235] Basalt Monolith
|
||||
1 [C15:207] Darksteel Ingot
|
||||
1 [C15:142] Urza's Incubator
|
||||
1 [C15:279] Vivid Meadow
|
||||
1 [C15:39] Sun Titan
|
||||
1 [C15:55] Thought Vessel
|
||||
1 [C15:131] Hunted Dragon
|
||||
1 [C15:255] Boros Signet
|
||||
1 [C15:57] Desolation Giant
|
||||
1 [C15:176] Hostility
|
||||
1 [C15:52] Sandstone Oracle
|
||||
1 [C15:142] Stoneshock Giant
|
||||
1 [C15:51] Blade of Selves
|
||||
1 [C15:1] Angel of Serenity
|
||||
1 [C15:216] Dreamstone Hedron
|
||||
1 [C15:130] Hammerfist Giant
|
||||
1 [C15:274] Sol Ring
|
||||
1 [C15:16] Faith's Fetters
|
||||
1 [C15:18] Victory's Herald
|
||||
1 [C15:130] Seer's Sundial
|
||||
1 [C15:138] Breath of Darigaaz
|
||||
1 [C15:2] Arbiter of Knollridge
|
||||
1 [C15:16] Dawnglare Invoker
|
||||
1 [C15:217] Staff of Nin
|
||||
1 [C15:136] Hamletback Goliath
|
||||
1 [C15:28] Meteor Volley
|
||||
1 [C15:27] Magus of the Wheel
|
||||
1 [C15:26] Fiery Confluence
|
||||
1 [C15:25] Dream Pillager
|
||||
1 [C15:335] Mind Stone
|
||||
1 [C15:109] Taurean Mauler
|
||||
1 [C15:332] Loxodon Warhammer
|
||||
4 [C15:335] Mountain
|
||||
4 [C15:336] Mountain
|
||||
1 [C15:6] Oreskos Explorer
|
||||
3 [C15:337] Mountain
|
||||
1 [C15:5] Kalemne's Captain
|
||||
3 [C15:338] Mountain
|
||||
1 [C15:4] Herald of the Host
|
||||
1 [C15:2] Dawnbreak Reclaimer
|
||||
1 [C15:137] Curse of the Nightly Hunt
|
||||
1 [C15:199] Lightning Greaves
|
||||
1 [C15:137] Boros Cluestone
|
||||
1 [CSP:136] Coldsteel Heart
|
||||
SB: 1 [C15:45] Kalemne, Disciple of Iroas
|
|
@ -0,0 +1,23 @@
|
|||
NAME:Mormir Basic
|
||||
3 [BFZ:259] Island
|
||||
3 [BFZ:261] Swamp
|
||||
3 [BFZ:250] Plains
|
||||
3 [BFZ:272] Forest
|
||||
3 [BFZ:260] Swamp
|
||||
3 [BFZ:271] Forest
|
||||
3 [BFZ:270] Forest
|
||||
3 [BFZ:265] Mountain
|
||||
2 [BFZ:254] Plains
|
||||
3 [BFZ:264] Swamp
|
||||
3 [BFZ:274] Forest
|
||||
1 [BFZ:252] Plains
|
||||
3 [BFZ:262] Swamp
|
||||
3 [BFZ:251] Plains
|
||||
2 [BFZ:273] Forest
|
||||
3 [BFZ:258] Island
|
||||
2 [BFZ:269] Mountain
|
||||
3 [BFZ:268] Mountain
|
||||
3 [BFZ:257] Island
|
||||
3 [BFZ:267] Mountain
|
||||
3 [BFZ:266] Mountain
|
||||
2 [BFZ:255] Island
|
|
@ -1,30 +1,30 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
* 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.client.dialog;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
|
@ -71,7 +71,9 @@ public class NewTableDialog extends MageDialog {
|
|||
|
||||
private static final String LIMITED = "Limited";
|
||||
|
||||
/** Creates new form NewTableDialog */
|
||||
/**
|
||||
* Creates new form NewTableDialog
|
||||
*/
|
||||
public NewTableDialog() {
|
||||
session = MageFrame.getSession();
|
||||
lastSessionId = "";
|
||||
|
@ -79,13 +81,13 @@ public class NewTableDialog extends MageDialog {
|
|||
player1Panel.showLevel(false);
|
||||
this.spnNumWins.setModel(new SpinnerNumberModel(1, 1, 5, 1));
|
||||
this.spnFreeMulligans.setModel(new SpinnerNumberModel(0, 0, 5, 1));
|
||||
MageFrame.getUI().addButton(MageComponents.NEW_TABLE_OK_BUTTON, btnOK);
|
||||
MageFrame.getUI().addButton(MageComponents.NEW_TABLE_OK_BUTTON, btnOK);
|
||||
}
|
||||
|
||||
/** This method is called from within the constructor to
|
||||
* initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is
|
||||
* always regenerated by the Form Editor.
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is always
|
||||
* regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
|
@ -361,7 +363,7 @@ public class NewTableDialog extends MageDialog {
|
|||
GameTypeView gameType = (GameTypeView) cbGameType.getSelectedItem();
|
||||
MatchOptions options = new MatchOptions(this.txtName.getText(), gameType.getName());
|
||||
options.getPlayerTypes().add("Human");
|
||||
for (TablePlayerPanel player: players) {
|
||||
for (TablePlayerPanel player : players) {
|
||||
options.getPlayerTypes().add(player.getPlayerType());
|
||||
}
|
||||
options.setDeckType((String) this.cbDeckType.getSelectedItem());
|
||||
|
@ -370,9 +372,9 @@ public class NewTableDialog extends MageDialog {
|
|||
options.setAttackOption((MultiplayerAttackOption) this.cbAttackOption.getSelectedItem());
|
||||
options.setSkillLevel((SkillLevel) this.cbSkillLevel.getSelectedItem());
|
||||
options.setRange((RangeOfInfluence) this.cbRange.getSelectedItem());
|
||||
options.setWinsNeeded((Integer)this.spnNumWins.getValue());
|
||||
options.setWinsNeeded((Integer) this.spnNumWins.getValue());
|
||||
options.setRollbackTurnsAllowed(chkRollbackTurnsAllowed.isSelected());
|
||||
options.setFreeMulligans((Integer)this.spnFreeMulligans.getValue());
|
||||
options.setFreeMulligans((Integer) this.spnFreeMulligans.getValue());
|
||||
options.setPassword(this.txtPassword.getText());
|
||||
if (!checkMatchOptions(options)) {
|
||||
return;
|
||||
|
@ -391,9 +393,8 @@ public class NewTableDialog extends MageDialog {
|
|||
this.player1Panel.getPlayerName(),
|
||||
"Human", 1,
|
||||
DeckImporterUtil.importDeck(this.player1Panel.getDeckFile()),
|
||||
this.txtPassword.getText())
|
||||
) {
|
||||
for (TablePlayerPanel player: players) {
|
||||
this.txtPassword.getText())) {
|
||||
for (TablePlayerPanel player : players) {
|
||||
if (!player.getPlayerType().equals("Human")) {
|
||||
if (!player.joinTable(roomId, table.getTableId())) {
|
||||
// error message must be send by the server
|
||||
|
@ -423,7 +424,7 @@ public class NewTableDialog extends MageDialog {
|
|||
}//GEN-LAST:event_cbGameTypeActionPerformed
|
||||
|
||||
private void numPlayersChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_numPlayersChanged
|
||||
int numPlayers = (Integer)this.spnNumPlayers.getValue() - 1;
|
||||
int numPlayers = (Integer) this.spnNumPlayers.getValue() - 1;
|
||||
createPlayers(numPlayers);
|
||||
}//GEN-LAST:event_numPlayersChanged
|
||||
|
||||
|
@ -432,9 +433,10 @@ public class NewTableDialog extends MageDialog {
|
|||
}//GEN-LAST:event_spnNumWinsnumPlayersChanged
|
||||
|
||||
/**
|
||||
* Checks about not valid game option combinations and shows an error message
|
||||
*
|
||||
* @return
|
||||
* Checks about not valid game option combinations and shows an error
|
||||
* message
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private boolean checkMatchOptions(MatchOptions options) {
|
||||
switch (options.getDeckType()) {
|
||||
|
@ -451,11 +453,17 @@ public class NewTableDialog extends MageDialog {
|
|||
return false;
|
||||
}
|
||||
break;
|
||||
case "Variant Magic - Momir Basic":
|
||||
if (!options.getGameType().startsWith("Momir Basic")) {
|
||||
JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Deck type Momir Basic needs also a Momir Basic game type", "Error", JOptionPane.ERROR_MESSAGE);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
switch (options.getGameType()) {
|
||||
case "Commander Two Player Duel":
|
||||
case "Commander Free For All":
|
||||
if (!options.getDeckType().equals("Variant Magic - Commander") && !options.getDeckType().equals("Variant Magic - Duel Commander") ) {
|
||||
if (!options.getDeckType().equals("Variant Magic - Commander") && !options.getDeckType().equals("Variant Magic - Duel Commander")) {
|
||||
JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Deck type Commander needs also a Commander game type", "Error", JOptionPane.ERROR_MESSAGE);
|
||||
return false;
|
||||
}
|
||||
|
@ -466,16 +474,16 @@ public class NewTableDialog extends MageDialog {
|
|||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private void setGameOptions() {
|
||||
GameTypeView gameType = (GameTypeView) cbGameType.getSelectedItem();
|
||||
int oldValue = (Integer) this.spnNumPlayers.getValue();
|
||||
this.spnNumPlayers.setModel(new SpinnerNumberModel(gameType.getMinPlayers(), gameType.getMinPlayers(), gameType.getMaxPlayers(), 1));
|
||||
this.spnNumPlayers.setEnabled(gameType.getMinPlayers() != gameType.getMaxPlayers());
|
||||
if (oldValue >= gameType.getMinPlayers() && oldValue <= gameType.getMaxPlayers()){
|
||||
if (oldValue >= gameType.getMinPlayers() && oldValue <= gameType.getMaxPlayers()) {
|
||||
this.spnNumPlayers.setValue(oldValue);
|
||||
}
|
||||
this.cbAttackOption.setEnabled(gameType.isUseAttackOption());
|
||||
|
@ -495,17 +503,16 @@ public class NewTableDialog extends MageDialog {
|
|||
playerPanel.init(players.size() + 2, playerType);
|
||||
players.add(playerPanel);
|
||||
playerPanel.addPlayerTypeEventListener(
|
||||
new Listener<Event> () {
|
||||
@Override
|
||||
public void event(Event event) {
|
||||
drawPlayers();
|
||||
new Listener<Event>() {
|
||||
@Override
|
||||
public void event(Event event) {
|
||||
drawPlayers();
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
// remove player panels no longer needed
|
||||
|
||||
} // remove player panels no longer needed
|
||||
else if (numPlayers < players.size()) {
|
||||
while (players.size() != numPlayers) {
|
||||
players.remove(players.size() - 1);
|
||||
|
@ -516,7 +523,7 @@ public class NewTableDialog extends MageDialog {
|
|||
|
||||
private void drawPlayers() {
|
||||
this.pnlOtherPlayers.removeAll();
|
||||
for (TablePlayerPanel panel: players) {
|
||||
for (TablePlayerPanel panel : players) {
|
||||
this.pnlOtherPlayers.add(panel);
|
||||
}
|
||||
this.pack();
|
||||
|
@ -531,7 +538,7 @@ public class NewTableDialog extends MageDialog {
|
|||
}
|
||||
|
||||
public void showDialog(UUID roomId) {
|
||||
this.roomId = roomId;
|
||||
this.roomId = roomId;
|
||||
if (!lastSessionId.equals(MageFrame.getSession().getSessionId())) {
|
||||
lastSessionId = session.getSessionId();
|
||||
this.player1Panel.setPlayerName(session.getUserName());
|
||||
|
@ -543,8 +550,8 @@ public class NewTableDialog extends MageDialog {
|
|||
cbAttackOption.setModel(new DefaultComboBoxModel(MultiplayerAttackOption.values()));
|
||||
cbSkillLevel.setModel(new DefaultComboBoxModel(SkillLevel.values()));
|
||||
// Update the existing player panels (neccessary if server was changes = new session)
|
||||
int i=2;
|
||||
for (TablePlayerPanel tablePlayerPanel :players) {
|
||||
int i = 2;
|
||||
for (TablePlayerPanel tablePlayerPanel : players) {
|
||||
tablePlayerPanel.init(i++, tablePlayerPanel.getPlayerType());
|
||||
}
|
||||
setGameSettingsFromPrefs();
|
||||
|
@ -565,7 +572,7 @@ public class NewTableDialog extends MageDialog {
|
|||
|
||||
private void selectLimitedByDefault() {
|
||||
for (int i = 0; i < cbDeckType.getItemCount(); i++) {
|
||||
String name = (String)cbDeckType.getItemAt(i);
|
||||
String name = (String) cbDeckType.getItemAt(i);
|
||||
if (name.equals(LIMITED)) {
|
||||
cbDeckType.setSelectedIndex(i);
|
||||
break;
|
||||
|
@ -574,9 +581,9 @@ public class NewTableDialog extends MageDialog {
|
|||
}
|
||||
|
||||
/**
|
||||
* set the table settings from java prefs
|
||||
* set the table settings from java prefs
|
||||
*/
|
||||
private void setGameSettingsFromPrefs () {
|
||||
private void setGameSettingsFromPrefs() {
|
||||
txtName.setText(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_NAME, "Game"));
|
||||
txtPassword.setText(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_PASSWORD, ""));
|
||||
|
||||
|
@ -585,7 +592,6 @@ public class NewTableDialog extends MageDialog {
|
|||
prefPlayerTypes.addAll(Arrays.asList(playerTypes.split(",")));
|
||||
this.spnNumPlayers.setValue(Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_NUMBER_PLAYERS, "2")));
|
||||
|
||||
|
||||
String gameTypeName = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_GAME_TYPE, "Two Player Duel");
|
||||
for (GameTypeView gtv : session.getGameTypes()) {
|
||||
if (gtv.getName().equals(gameTypeName)) {
|
||||
|
@ -594,7 +600,7 @@ public class NewTableDialog extends MageDialog {
|
|||
}
|
||||
}
|
||||
int timeLimit = Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_TIME_LIMIT, "1500"));
|
||||
for (MatchTimeLimit mtl :MatchTimeLimit.values()) {
|
||||
for (MatchTimeLimit mtl : MatchTimeLimit.values()) {
|
||||
if (mtl.getTimeLimit() == timeLimit) {
|
||||
this.cbTimeLimit.setSelectedItem(mtl);
|
||||
break;
|
||||
|
@ -608,32 +614,32 @@ public class NewTableDialog extends MageDialog {
|
|||
this.spnNumWins.setValue(Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_NUMBER_OF_WINS, "2")));
|
||||
this.chkRollbackTurnsAllowed.setSelected(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_ROLLBACK_TURNS_ALLOWED, "Yes").equals("Yes"));
|
||||
|
||||
|
||||
int range = Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_RANGE, "1"));
|
||||
for (RangeOfInfluence roi :RangeOfInfluence.values()) {
|
||||
for (RangeOfInfluence roi : RangeOfInfluence.values()) {
|
||||
if (roi.getRange() == range) {
|
||||
this.cbRange.setSelectedItem(roi);
|
||||
break;
|
||||
}
|
||||
}
|
||||
String attackOption = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_ATTACK_OPTION, "Attack Multiple Players");
|
||||
for (MultiplayerAttackOption mao :MultiplayerAttackOption.values()) {
|
||||
for (MultiplayerAttackOption mao : MultiplayerAttackOption.values()) {
|
||||
if (mao.toString().equals(attackOption)) {
|
||||
this.cbAttackOption.setSelectedItem(mao);
|
||||
break;
|
||||
}
|
||||
}
|
||||
String skillLevelDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_SKILL_LEVEL, "Casual");
|
||||
for (SkillLevel skillLevel :SkillLevel.values()) {
|
||||
for (SkillLevel skillLevel : SkillLevel.values()) {
|
||||
if (skillLevel.toString().equals(skillLevelDefault)) {
|
||||
this.cbSkillLevel.setSelectedItem(skillLevel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the settings to java prefs to reload it next time the dialog will be created
|
||||
* Save the settings to java prefs to reload it next time the dialog will be
|
||||
* created
|
||||
*
|
||||
* @param options
|
||||
* @param deckFile
|
||||
|
@ -645,7 +651,7 @@ public class NewTableDialog extends MageDialog {
|
|||
PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_TIME_LIMIT, Integer.toString(options.getPriorityTime()));
|
||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_GAME_TYPE, options.getGameType());
|
||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_NUMBER_OF_WINS, Integer.toString(options.getWinsNeeded()));
|
||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_ROLLBACK_TURNS_ALLOWED, options.isRollbackTurnsAllowed() ? "Yes": "No");
|
||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_ROLLBACK_TURNS_ALLOWED, options.isRollbackTurnsAllowed() ? "Yes" : "No");
|
||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_NUMBER_OF_FREE_MULLIGANS, Integer.toString(options.getFreeMulligans()));
|
||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_DECK_FILE, deckFile);
|
||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_NUMBER_PLAYERS, spnNumPlayers.getValue().toString());
|
||||
|
@ -655,7 +661,7 @@ public class NewTableDialog extends MageDialog {
|
|||
StringBuilder playerTypesString = new StringBuilder();
|
||||
ListIterator iterator = players.listIterator();
|
||||
while (iterator.hasNext()) {
|
||||
if (playerTypesString.length()>0) {
|
||||
if (playerTypesString.length() > 0) {
|
||||
playerTypesString.append(",");
|
||||
}
|
||||
TablePlayerPanel tpp = (TablePlayerPanel) iterator.next();
|
||||
|
|
|
@ -802,7 +802,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
|
|||
}
|
||||
|
||||
private void btnCommandZoneActionPerformed(java.awt.event.ActionEvent evt) {
|
||||
DialogManager.getManager(gameId).showEmblemsDialog(CardsViewUtil.convertCommandObject(player.getCommadObjectList()), bigCard, gameId);
|
||||
DialogManager.getManager(gameId).showEmblemsDialog(CardsViewUtil.convertCommandObject(player.getCommandObjectList()), bigCard, gameId);
|
||||
}
|
||||
|
||||
private void btnExileZoneActionPerformed(java.awt.event.ActionEvent evt) {
|
||||
|
|
|
@ -58,7 +58,6 @@ public class Plugins implements MagePlugins {
|
|||
pm.addPluginsFrom(new File(PLUGINS_DIRECTORY).toURI());
|
||||
this.cardPlugin = new CardPluginImpl();
|
||||
this.counterPlugin = pm.getPlugin(CounterPlugin.class);
|
||||
//this.themePlugin = pm.getPlugin(ThemePlugin.class);
|
||||
this.themePlugin = new ThemePluginImpl();
|
||||
logger.info("Done.");
|
||||
}
|
||||
|
|
|
@ -501,7 +501,7 @@ public class TablesPanel extends javax.swing.JPanel {
|
|||
// type
|
||||
List<RowFilter<Object, Object>> typeFilterList = new ArrayList<>();
|
||||
if (btnTypeMatch.isSelected()) {
|
||||
typeFilterList.add(RowFilter.regexFilter("Two|Commander|Free|Tiny", TableTableModel.COLUMN_GAME_TYPE));
|
||||
typeFilterList.add(RowFilter.regexFilter("Two|Commander|Free|Tiny|Momir", TableTableModel.COLUMN_GAME_TYPE));
|
||||
}
|
||||
if (btnTypeTourneyConstructed.isSelected()) {
|
||||
typeFilterList.add(RowFilter.regexFilter("Constructed", TableTableModel.COLUMN_GAME_TYPE));
|
||||
|
@ -537,7 +537,7 @@ public class TablesPanel extends javax.swing.JPanel {
|
|||
formatFilterList.add(RowFilter.regexFilter("^Limited", TableTableModel.COLUMN_DECK_TYPE));
|
||||
}
|
||||
if (btnFormatOther.isSelected()) {
|
||||
formatFilterList.add(RowFilter.regexFilter("^Constructed - Pauper|^Constructed - Extended|^Constructed - Historical|^Constructed - Super", TableTableModel.COLUMN_DECK_TYPE));
|
||||
formatFilterList.add(RowFilter.regexFilter("^Momir Basic|^Constructed - Pauper|^Constructed - Extended|^Constructed - Historical|^Constructed - Super", TableTableModel.COLUMN_DECK_TYPE));
|
||||
}
|
||||
|
||||
List<RowFilter<Object, Object>> skillFilterList = new ArrayList<>();
|
||||
|
|
|
@ -303,7 +303,7 @@ public class AudioManager {
|
|||
|
||||
private static void checkAndPlayClip(MageClip mageClip) {
|
||||
try {
|
||||
if (mageClip != null) {
|
||||
if (mageClip != null && mageClip.getClip() != null) {
|
||||
boolean playSound = false;
|
||||
switch (mageClip.getAudioGroup()) {
|
||||
case GameSounds:
|
||||
|
|
|
@ -81,6 +81,7 @@ public class CardPluginImpl implements CardPlugin {
|
|||
|
||||
@PluginLoaded
|
||||
public void newPlugin(CardPlugin plugin) {
|
||||
log.info(plugin.toString() + " has been loaded.");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,7 +9,7 @@ import org.mage.plugins.card.images.CardDownloadData;
|
|||
public interface CardImageSource {
|
||||
|
||||
String generateURL(CardDownloadData card) throws Exception;
|
||||
String generateTokenUrl(CardDownloadData card);
|
||||
String generateTokenUrl(CardDownloadData card) throws Exception;
|
||||
String getSourceName();
|
||||
Float getAverageSize();
|
||||
}
|
||||
|
|
|
@ -157,7 +157,12 @@ public class MagicCardsImageSource implements CardImageSource {
|
|||
|
||||
@Override
|
||||
public String generateTokenUrl(CardDownloadData card) {
|
||||
String name = card.getName().replaceAll(" ", "-").replace(",", "").toLowerCase();
|
||||
String name = card.getName();
|
||||
// add type to name if it's not 0
|
||||
if (card.getType() > 0) {
|
||||
name = name + " " + card.getType();
|
||||
}
|
||||
name = name.replaceAll(" ", "-").replace(",", "").toLowerCase();
|
||||
String set = "not-supported-set";
|
||||
if (setNameTokenReplacement.containsKey(card.getSet())) {
|
||||
set = setNameTokenReplacement.get(card.getSet());
|
||||
|
|
|
@ -0,0 +1,324 @@
|
|||
/*
|
||||
* 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 org.mage.plugins.card.dl.sources;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.mage.plugins.card.images.CardDownloadData;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Quercitron
|
||||
*/
|
||||
public class TokensMtgImageSource implements CardImageSource {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(TokensMtgImageSource.class);
|
||||
|
||||
private static CardImageSource instance = new TokensMtgImageSource();
|
||||
|
||||
public static CardImageSource getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new TokensMtgImageSource();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSourceName() {
|
||||
return "tokens.mtg.onl";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Float getAverageSize() {
|
||||
return 26.7f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateURL(CardDownloadData card) throws Exception {
|
||||
return null;
|
||||
}
|
||||
|
||||
private static final String[] EMBLEMS = {
|
||||
"Ajani",
|
||||
"Chandra",
|
||||
"Dack",
|
||||
"Daretti",
|
||||
"Domri",
|
||||
"Elspeth",
|
||||
"Garruk",
|
||||
"Gideon",
|
||||
"Jace",
|
||||
"Kiora",
|
||||
"Koth",
|
||||
"Liliana",
|
||||
"Narset",
|
||||
"Nixilis",
|
||||
"Sarkhan",
|
||||
"Sorin",
|
||||
"Tamiyo",
|
||||
"Teferi",
|
||||
"Venser",
|
||||
};
|
||||
|
||||
private static final Map<String, String> SET_NAMES_REPLACEMENT = new HashMap<String, String>() {
|
||||
{
|
||||
put("con", "CFX");
|
||||
put("fnmp", "FNM");
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public String generateTokenUrl(CardDownloadData card) throws IOException {
|
||||
String name = card.getName();
|
||||
String set = card.getSet();
|
||||
int type = card.getType();
|
||||
|
||||
// handle emblems
|
||||
if (name.toLowerCase().contains("emblem")) {
|
||||
for (String emblem : EMBLEMS) {
|
||||
if (name.toLowerCase().contains(emblem.toLowerCase())){
|
||||
name = emblem + " Emblem";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// we should replace some set names
|
||||
if (SET_NAMES_REPLACEMENT.containsKey(set.toLowerCase())) {
|
||||
set = SET_NAMES_REPLACEMENT.get(set.toLowerCase());
|
||||
}
|
||||
|
||||
// Image URL contains token number
|
||||
// e.g. http://tokens.mtg.onl/tokens/ORI_010-Thopter.jpg -- token number 010
|
||||
// We don't know these numbers, but we can take them from a file
|
||||
// with tokens information that can be downloaded from the site.
|
||||
List<TokenData> tokensData = getTokensData();
|
||||
|
||||
if (tokensData.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
List<TokenData> matchedTokens = new ArrayList<TokenData>();
|
||||
for (TokenData token : tokensData) {
|
||||
if (name.equalsIgnoreCase(token.getName()) && set.equalsIgnoreCase(token.getExpansionSetCode())) {
|
||||
matchedTokens.add(token);
|
||||
}
|
||||
}
|
||||
|
||||
if (matchedTokens.isEmpty()) {
|
||||
logger.info("Could not find data for token " + name + ", set " + set + ".");
|
||||
return null;
|
||||
}
|
||||
|
||||
TokenData tokenData;
|
||||
if (type == 0) {
|
||||
if (matchedTokens.size() > 1) {
|
||||
logger.info("Multiple images were found for token " + name + ", set " + set + ".");
|
||||
}
|
||||
tokenData = matchedTokens.get(0);
|
||||
} else {
|
||||
if (type > matchedTokens.size()) {
|
||||
logger.warn("Not enough images for token with type " + type + ", name " + name + ", set " + set + ".");
|
||||
return null;
|
||||
}
|
||||
tokenData = matchedTokens.get(card.getType() - 1);
|
||||
}
|
||||
|
||||
String url = "http://tokens.mtg.onl/tokens/" + tokenData.getExpansionSetCode().trim() + "_"
|
||||
+ tokenData.getNumber().trim() + "-" + tokenData.getName().trim()+ ".jpg";
|
||||
url = url.replace(' ', '-');
|
||||
return url;
|
||||
}
|
||||
|
||||
private List<TokenData> tokensData;
|
||||
|
||||
private final Object tokensDataSync = new Object();
|
||||
|
||||
private List<TokenData> getTokensData() throws IOException {
|
||||
if (tokensData == null) {
|
||||
synchronized (tokensDataSync) {
|
||||
if (tokensData == null) {
|
||||
tokensData = new ArrayList<TokenData>();
|
||||
|
||||
// get tokens data from resource file
|
||||
InputStream inputStream = null;
|
||||
try {
|
||||
inputStream = this.getClass().getResourceAsStream("/tokens-mtg-onl-list.csv");
|
||||
List<TokenData> fileTokensData = parseTokensData(inputStream);
|
||||
tokensData.addAll(fileTokensData);
|
||||
} catch (Exception exception) {
|
||||
logger.warn("Failed to get tokens description from resource file tokens-mtg-onl-list.csv", exception);
|
||||
} finally {
|
||||
if (inputStream != null) {
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (Exception e) {
|
||||
logger.error("Input stream close failed:", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// description on site may contain new information
|
||||
// try to add it
|
||||
try {
|
||||
URL url = new URL("http://tokens.mtg.onl/data/SetsWithTokens.csv");
|
||||
inputStream = url.openStream();
|
||||
List<TokenData> siteTokensData = parseTokensData(inputStream);
|
||||
|
||||
List<TokenData> newTokensData = new ArrayList<TokenData>();
|
||||
for (TokenData siteData : siteTokensData) {
|
||||
boolean isNew = true;
|
||||
for (TokenData fileData : tokensData) {
|
||||
if (siteData.getName().equalsIgnoreCase(fileData.getName())
|
||||
&& siteData.getNumber().equalsIgnoreCase(fileData.getNumber())
|
||||
&& siteData.getExpansionSetCode().equalsIgnoreCase(fileData.getExpansionSetCode())) {
|
||||
isNew = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isNew) {
|
||||
newTokensData.add(siteData);
|
||||
}
|
||||
}
|
||||
|
||||
tokensData.addAll(newTokensData);
|
||||
} catch (Exception exception) {
|
||||
logger.warn("Failed to get tokens description from tokens.mtg.onl", exception);
|
||||
} finally {
|
||||
if (inputStream != null) {
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (Exception e) {
|
||||
logger.error("Input stream close failed:", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return tokensData;
|
||||
}
|
||||
|
||||
private List<TokenData> parseTokensData(InputStream inputStream) throws IOException {
|
||||
List<TokenData> tokensData = new ArrayList<TokenData>();
|
||||
|
||||
InputStreamReader inputReader = null;
|
||||
BufferedReader reader = null;
|
||||
try {
|
||||
// we have to specify encoding to read special comma
|
||||
inputReader = new InputStreamReader(inputStream, "Cp1252");
|
||||
reader = new BufferedReader(inputReader);
|
||||
|
||||
reader.readLine(); // skip header
|
||||
String line = reader.readLine();
|
||||
// states
|
||||
// 0 - wait set name
|
||||
// 1 - wait cards
|
||||
// 2 - process cards
|
||||
int state = 0;
|
||||
String set = null;
|
||||
while (line != null) {
|
||||
if (line.trim().isEmpty()) {
|
||||
if (state == 2) {
|
||||
state = 0;
|
||||
}
|
||||
} else {
|
||||
if (state == 0) {
|
||||
set = line.substring(0, 3);
|
||||
state = 1;
|
||||
} else {
|
||||
if (state == 1) {
|
||||
state = 2;
|
||||
}
|
||||
String[] split = line.split(",");
|
||||
// replace special comma for cards like 'Ashaya‚ the Awoken World'
|
||||
String name = split[0].replace('‚', ',');
|
||||
String number = split[1];
|
||||
TokenData token = new TokenData(name, number, set);
|
||||
tokensData.add(token);
|
||||
}
|
||||
}
|
||||
|
||||
line = reader.readLine();
|
||||
}
|
||||
} finally {
|
||||
if (inputReader != null) {
|
||||
try {
|
||||
inputReader.close();
|
||||
} catch (Exception e) {
|
||||
logger.error("Input reader close failed:", e);
|
||||
}
|
||||
}
|
||||
if (reader != null) {
|
||||
try {
|
||||
reader.close();
|
||||
} catch (Exception e) {
|
||||
logger.error("Buffered reader close failed:", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return tokensData;
|
||||
}
|
||||
|
||||
final class TokenData {
|
||||
final private String name;
|
||||
final private String number;
|
||||
final private String expansionSetCode;
|
||||
|
||||
public TokenData(String name, String number, String expansionSetCode) {
|
||||
this.name = name;
|
||||
this.number = number;
|
||||
this.expansionSetCode = expansionSetCode;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getNumber() {
|
||||
return number;
|
||||
}
|
||||
|
||||
public String getExpansionSetCode() {
|
||||
return expansionSetCode;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -54,10 +54,7 @@ import net.java.truevfs.access.TFileOutputStream;
|
|||
import net.java.truevfs.access.TVFS;
|
||||
import net.java.truevfs.kernel.spec.FsSyncException;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.mage.plugins.card.dl.sources.CardImageSource;
|
||||
import org.mage.plugins.card.dl.sources.MagicCardsImageSource;
|
||||
import org.mage.plugins.card.dl.sources.MythicspoilerComSource;
|
||||
import org.mage.plugins.card.dl.sources.WizardCardsImageSource;
|
||||
import org.mage.plugins.card.dl.sources.*;
|
||||
import org.mage.plugins.card.properties.SettingsManager;
|
||||
import org.mage.plugins.card.utils.CardImageUtils;
|
||||
|
||||
|
@ -138,7 +135,16 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
|
||||
p0.add(jLabel1);
|
||||
p0.add(Box.createVerticalStrut(5));
|
||||
ComboBoxModel jComboBox1Model = new DefaultComboBoxModel(new String[] { "magiccards.info", "wizards.com", "mythicspoiler.com" /*, "mtgimage.com (HQ)" , "mtgathering.ru HQ", "mtgathering.ru MQ", "mtgathering.ru LQ"*/});
|
||||
ComboBoxModel jComboBox1Model = new DefaultComboBoxModel(new String[] {
|
||||
"magiccards.info",
|
||||
"wizards.com",
|
||||
"mythicspoiler.com",
|
||||
"tokens.mtg.onl",
|
||||
//"mtgimage.com (HQ)",
|
||||
//"mtgathering.ru HQ",
|
||||
//"mtgathering.ru MQ",
|
||||
//"mtgathering.ru LQ",
|
||||
});
|
||||
jComboBox1 = new JComboBox();
|
||||
|
||||
cardImageSource = MagicCardsImageSource.getInstance();
|
||||
|
@ -159,6 +165,9 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
case 2:
|
||||
cardImageSource = MythicspoilerComSource.getInstance();
|
||||
break;
|
||||
case 3:
|
||||
cardImageSource = TokensMtgImageSource.getInstance();
|
||||
break;
|
||||
}
|
||||
int count = DownloadPictures.this.cards.size();
|
||||
float mb = (count * cardImageSource.getAverageSize()) / 1024;
|
||||
|
@ -361,23 +370,27 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
|
|||
while (line != null) {
|
||||
line = line.trim();
|
||||
if (line.startsWith("|")) { // new format
|
||||
String[] params = line.split("\\|");
|
||||
if (params.length >= 4) {
|
||||
String[] params = line.split("\\|", -1);
|
||||
if (params.length >= 5) {
|
||||
int type = 0;
|
||||
if (params[4] != null && ! params[4].isEmpty()) {
|
||||
type = Integer.parseInt(params[4].trim());
|
||||
}
|
||||
if (params[1].toLowerCase().equals("generate") && params[2].startsWith("TOK:")) {
|
||||
String set = params[2].substring(4);
|
||||
CardDownloadData card = new CardDownloadData(params[3], set, 0, false, 0, "", true);
|
||||
CardDownloadData card = new CardDownloadData(params[3], set, 0, false, type, "", true);
|
||||
list.add(card);
|
||||
} else if (params[1].toLowerCase().equals("generate") && params[2].startsWith("EMBLEM:")) {
|
||||
String set = params[2].substring(7);
|
||||
CardDownloadData card = new CardDownloadData("Emblem " + params[3], set, 0, false,0, "", true);
|
||||
CardDownloadData card = new CardDownloadData("Emblem " + params[3], set, 0, false, type, "", true);
|
||||
list.add(card);
|
||||
} else if (params[1].toLowerCase().equals("generate") && params[2].startsWith("EMBLEM-:")) {
|
||||
String set = params[2].substring(8);
|
||||
CardDownloadData card = new CardDownloadData(params[3] + " Emblem", set, 0, false, 0, "", true);
|
||||
CardDownloadData card = new CardDownloadData(params[3] + " Emblem", set, 0, false, type, "", true);
|
||||
list.add(card);
|
||||
} else if (params[1].toLowerCase().equals("generate") && params[2].startsWith("EMBLEM!:")) {
|
||||
String set = params[2].substring(8);
|
||||
CardDownloadData card = new CardDownloadData(params[3], set, 0, false, 0, "", true);
|
||||
CardDownloadData card = new CardDownloadData(params[3], set, 0, false, type, "", true);
|
||||
list.add(card);
|
||||
}
|
||||
} else {
|
||||
|
|
File diff suppressed because it is too large
Load diff
712
Mage.Client/src/main/resources/tokens-mtg-onl-list.csv
Normal file
712
Mage.Client/src/main/resources/tokens-mtg-onl-list.csv
Normal file
|
@ -0,0 +1,712 @@
|
|||
Token name, Number, Color, P/T, Promo, Type, Artist, Text
|
||||
|
||||
UGL - Unglued (1998-08-11)
|
||||
|
||||
Pegasus, 89, W, 1|1, -, Creature - Pegasus, Mark Zug, Flying
|
||||
Soldier, 90, W, 1|1, -, Creature - Soldier, Daren Bader, -
|
||||
Zombie, 91, B, 2|2, -, Creature - Zombie, Christopher Rush, -
|
||||
Goblin, 92, R, 1|1, -, Creature - Goblin, Pete Venters, -
|
||||
Sheep, 93, G, 1|1, -, Creature - Sheep, Kev Walker, -
|
||||
Squirrel, 94, G, 1|1, -, Creature - Squirrel, Ron Spencer, -
|
||||
|
||||
ATH - Anthologies (1998-11-01)
|
||||
|
||||
Pegasus, 89, W, 1|1, -, Creature - Pegasus, Mark Zug, Flying
|
||||
Goblin, 92, R, 1|1, -, Creature - Goblin, Pete Venters, -
|
||||
|
||||
INV - Invasion (2000-10-02)
|
||||
|
||||
Bird, T1, U, 1|1, Player Rewards, Creature - Bird, Michael Sutfin, Flying
|
||||
Elephant, T2, G, 3|3, Player Rewards, Creature - Elephant, Terese Nielsen, -
|
||||
Saproling, T3, G, 1|1, Player Rewards, Creature - Saproling, Jeff Laubenstein, -
|
||||
|
||||
PLS - Planeshift (2001-02-05)
|
||||
|
||||
Spirit, T1, W, 1|1, Player Rewards, Creature - Spirit, John Matson, Flying
|
||||
|
||||
APC - Apocalypse (2001-06-04)
|
||||
|
||||
Goblin Soldier, T1, R W, 1|1, Player Rewards, Creature - Goblin Soldier, Ron Spears, -
|
||||
|
||||
ODY - Odyssey (2001-10-01)
|
||||
|
||||
Bear, T1, G, 2|2, Player Rewards, Creature - Bear, Heather Hudson, -
|
||||
Beast, T2, G, 4|4, Player Rewards, Creature - Beast, Larry Elmore, -
|
||||
Elephant, T3, G, 3|3, Player Rewards, Creature - Elephant, Arnie Swekel, -
|
||||
Squirrel, T4, G, 1|1, Player Rewards, Creature - Squirrel, Ron Spencer, -
|
||||
Wurm, T5, G, 6|6, Player Rewards, Creature - Wurm, Alan Pollack, -
|
||||
Zombie, T6, B, 2|2, Player Rewards, Creature - Zombie, Dana Knutson, -
|
||||
|
||||
ONS - Onslaught (2002-10-07)
|
||||
|
||||
Bear, T1, G, 2|2, Player Rewards, Creature - Bear, Glen Angus, -
|
||||
Dragon, T2, R, 5|5, Player Rewards, Creature - Dragon, Glen Angus, Flying
|
||||
Insect, T3, G, 1|1, Player Rewards, Creature - Insect, Anthony S. Waters, -
|
||||
Soldier, T4, W, 1|1, Player Rewards, Creature - Soldier, Ron Spencer, -
|
||||
|
||||
LGN - Legions (2003-02-03)
|
||||
|
||||
Goblin, T1, R, 1|1, Player Rewards, Creature - Goblin, Darrell Riche, -
|
||||
Sliver, T2, -, 1|1, Player Rewards, Creature - Sliver, Tony Szczudlo, -
|
||||
|
||||
SCG - Scourge (2003-05-26)
|
||||
|
||||
Angel, T1, W, 4|4, Player Rewards, Creature - Angel, Scott M. Fischer, Flying
|
||||
|
||||
8ED - Eighth Edition (2003-07-28)
|
||||
|
||||
Rukh, T1, R, 4|4, Player Rewards, Creature - Rukh, Edward P. Beard‚ Jr., Flying
|
||||
|
||||
MRD - Mirrodin (2003-10-02)
|
||||
|
||||
Demon, T1, B, *|*, Player Rewards, Creature - Demon, Pete Venters, -
|
||||
Myr, T2, -, 1|1, Player Rewards, Creature - Myr, Wayne England, -
|
||||
Pentavite, T3, -, 1|1, Player Rewards, Artifact Creature - Pentavite, Greg Staples, -
|
||||
|
||||
DST - Darksteel (2004-02-06)
|
||||
|
||||
Beast, T1, G, 3|3, Player Rewards, Creature - Beast, Edward P. Beard‚ Jr., -
|
||||
|
||||
CHK - Champions of Kamigawa (2004-10-01)
|
||||
|
||||
Spirit, T1, -, 1|1, Player Rewards, Creature - Spirit, Hugh Jamieson, -
|
||||
|
||||
CSP - Coldsnap (2006-07-21)
|
||||
|
||||
Marit Lage, T1, B, 20|20, Pre-Release, Creature - Avatar, Stephan Martiniere, Flying‚ indestructible
|
||||
|
||||
10E - Tenth Edition (2007-07-13)
|
||||
|
||||
Soldier, 1, W, 1|1, -, Creature - Soldier, Parente, -
|
||||
Zombie, 2, B, 2|2, -, Creature - Zombie, Carl Critchlow, -
|
||||
Dragon, 3, R, 5|5, -, Creature - Dragon, Jim Pavelec, Flying
|
||||
Goblin, 4, R, 1|1, -, Creature - Goblin, Dave Kendall, -
|
||||
Saproling, 5, G, 1|1, -, Creature - Saproling, Cyril Van Der Haegen, -
|
||||
Wasp, 6, -, 1|1, -, Artifact Creature - Insect, Ron Spencer, Flying
|
||||
|
||||
LRW - Lorwyn (2007-10-12)
|
||||
|
||||
Avatar, 1, W, *|*, -, Creature - Avatar, Vance Kovacs, This creature's power and toughness are each equal to your life total.
|
||||
Elemental, 2, W, 4|4, -, Creature - Elemental, Anthony S. Waters, Flying
|
||||
Kithkin Soldier, 3, W, 1|1, -, Creature - Kithkin Soldier, Greg Hildebrandt, -
|
||||
Merfolk Wizard, 4, U, 1|1, -, Creature - Merfolk Wizard, Mark Poole, -
|
||||
Goblin Rogue, 5, B, 1|1, -, Creature - Goblin Rogue, Richard Sardinha, -
|
||||
Elemental Shaman, 6, R, 3|1, -, Creature - Elemental Shaman, Jim Pavelec, -
|
||||
Beast, 7, G, 3|3, -, Creature - Beast, John Donahue, -
|
||||
Elemental, 8, G, 4|4, -, Creature - Elemental, Brandon Kitkouski, -
|
||||
Elf Warrior, 9, G, 1|1, -, Creature - Elf Warrior, Dominick Domingo, -
|
||||
Wolf, 10, G, 2|2, -, Creature - Wolf, Pete Venters, -
|
||||
Shapeshifter, 11, -, 1|1, -, Creature - Shapeshifter, Franz Vohwinkel, Changeling
|
||||
|
||||
EVG - Duel Decks: Elves vs. Goblins (2007-11-16)
|
||||
|
||||
Elemental, T1, G, 7|7, -, Creature - Elemental, Anthony S. Waters, Trample
|
||||
Elf Warrior, T2, G, 1|1, -, Creature - Elf Warrior, Dominick Domingo, -
|
||||
Goblin, T3, R, 1|1, -, Creature - Goblin, Dave Kendall, -
|
||||
|
||||
MOR - Morningtide (2008-02-01)
|
||||
|
||||
Giant Warrior, 1, W, 5|5, -, Creature - Giant Warrior, Steve Ellis, -
|
||||
Faerie Rogue, 2, B, 1|1, -, Creature - Faerie Rogue, Jim Nelson, Flying
|
||||
Treefolk Shaman, 3, G, 2|5, -, Creature - Treefolk Shaman, Richard Sardinha, -
|
||||
|
||||
SHM - Shadowmoor (2008-05-02)
|
||||
|
||||
Kithkin Soldier, 1, W, 1|1, -, Creature - Kithkin Soldier, Randy Gallegos, -
|
||||
Spirit, 2, W, 1|1, -, Creature - Spirit, Jeremy Enecio, Flying
|
||||
Rat, 3, B, 1|1, -, Creature - Rat, Carl Critchlow, -
|
||||
Elemental, 4, R, 1|1, -, Creature - Elemental, Cyril Van Der Haegen, Haste
|
||||
Elf Warrior, 5, G, 1|1, -, Creature - Elf Warrior, William O'Connor, -
|
||||
Spider, 6, G, 1|2, -, Creature - Spider, Thomas M. Baxa, Reach
|
||||
Wolf, 7, G, 2|2, -, Creature - Wolf, Lars Grant-West, -
|
||||
Faerie Rogue, 8, U B, 1|1, -, Creature - Faerie Rogue, E. M. Gist, Flying
|
||||
Elemental, 9, B R, 5|5, -, Creature - Elemental, Dave Dorman, -
|
||||
Giant Warrior, 10, R G, 4|4, -, Creature - Giant Warrior, Trevor Hairsine, Haste
|
||||
Goblin Warrior, 11, R G, 1|1, -, Creature - Goblin Warrior, Dave Allsop, -
|
||||
Elf Warrior, 12, G W, 1|1, -, Creature - Elf Warrior, Carl Frank, -
|
||||
|
||||
EVE - Eventide (2008-07-25)
|
||||
|
||||
Goat, 1, W, -, -, Creature - Goat, Terese Nielsen, -
|
||||
Bird, 2, U, 1|1, -, Creature - Bird, Heather Hudson, Flying
|
||||
Beast, 3, G, 3|3, -, Creature - Beast, William O'Connor, -
|
||||
Spirit, 4, W B, 1|1, -, Creature - Spirit, Larry MacDougall, Flying
|
||||
Elemental, 5, U R, 5|5, -, Creature - Elemental, Randy Gallegos, Flying
|
||||
Worm, 6, B G, 1|1, -, Creature - Worm, Chuck Lukacs, -
|
||||
Goblin Soldier, 7, R W, 1|1, -, Creature - Goblin Soldier, Jeff Miracola, -
|
||||
|
||||
ALA - Shards of Alara (2008-10-03)
|
||||
|
||||
Soldier, 1, W, 1|1, -, Creature - Soldier, Alan Pollack, -
|
||||
Homunculus, 2, U, -, -, Artifact Creature - Homunculus, Howard Lyon, -
|
||||
Thopter, 3, U, 1|1, -, Artifact Creature - Thopter, Andrew Murray, Flying
|
||||
Skeleton, 4, B, 1|1, -, Creature - Skeleton, Thomas M. Baxa, {B}: Regenerate this creature.
|
||||
Zombie, 5, B, 2|2, -, Creature - Zombie, Dave Kendall, -
|
||||
Dragon, 6, R, 4|4, -, Creature - Dragon, Vance Kovacs, Flying
|
||||
Goblin, 7, R, 1|1, -, Creature - Goblin, Brandon Kitkouski, -
|
||||
Ooze, 8, G, *|*, -, Creature - Ooze, Anthony S. Waters, -
|
||||
Saproling, 9, G, 1|1, -, Creature - Saproling, Trevor Claxton, -
|
||||
Beast, 10, R G W, 8|8, -, Creature - Beast, Parente, -
|
||||
|
||||
DD2 - Duel Decks: Jace vs. Chandra (2008-11-07)
|
||||
|
||||
Elemental Shaman, T1, R, 3|1, -, Creature - Elemental Shaman, Jim Pavelec, -
|
||||
|
||||
CFX - Conflux (2009-02-06)
|
||||
|
||||
Angel, 1, W, 4|4, -, Creature - Angel, Cyril Van Der Haegen, Flying
|
||||
Elemental, 2, R, 3|1, -, Creature - Elemental, Vance Kovacs, -
|
||||
|
||||
DDC - Duel Decks: Divine vs. Demonic (2009-04-10)
|
||||
|
||||
Spirit, T1, W, 1|1, -, Creature - Spirit, Luca Zontini, Flying
|
||||
Demon, T2, B, *|*, -, Creature - Demon, Pete Venters, Flying
|
||||
Thrull, T3, B, -, -, Creature - Thrull, Veronique Meignaud, -
|
||||
|
||||
ARB - Alara Reborn (2009-04-30)
|
||||
|
||||
Bird Soldier, 1, W, 1|1, -, Creature - Bird Soldier, Matt Cavotta, Flying
|
||||
Lizard, 2, G, 2|2, -, Creature - Lizard, Anthony S. Waters, -
|
||||
Dragon, 3, R G, 1|1, -, Creature - Dragon, Jaime Jones, Flying‚ devour 2
|
||||
Zombie Wizard, 4, U B, 1|1, -, Creature - Zombie Wizard, Dave Allsop, -
|
||||
|
||||
M10 - Magic 2010 (2009-07-17)
|
||||
|
||||
Avatar, 1, W, *|*, -, Creature - Avatar, Vance Kovacs, This creature's power and toughness are each equal to your life total.
|
||||
Soldier, 2, W, 1|1, -, Creature - Soldier, Parente, -
|
||||
Zombie, 3, B, 2|2, -, Creature - Zombie, Bud Cook, -
|
||||
Goblin, 4, R, 1|1, -, Creature - Goblin, Dave Kendall, -
|
||||
Beast, 5, G, 3|3, -, Creature - Beast, John Donahue, -
|
||||
Insect, 6, G, 1|1, -, Creature - Insect, Ron Spencer, -
|
||||
Wolf, 7, G, 2|2, -, Creature - Wolf, Lars Grant-West, -
|
||||
Gargoyle, 8, -, 3|4, -, Artifact Creature - Gargoyle, Paul Bonner, Flying
|
||||
|
||||
ZEN - Zendikar (2009-10-02)
|
||||
|
||||
Angel, 1, W, 4|4, -, Creature - Angel, Adi Granov, Flying
|
||||
Bird, 2, W, 1|1, -, Creature - Bird, Howard Lyon, Flying
|
||||
Kor Soldier, 3, W, 1|1, -, Creature - Kor Soldier, Daren Bader, -
|
||||
Illusion, 4, U, 2|2, -, Creature - Illusion, Cyril Van Der Haegen, -
|
||||
Merfolk, 5, U, 1|1, -, Creature - Merfolk, Warren Mahy, -
|
||||
Vampire, 6, B, *|*, -, Creature - Vampire, Kekai Kotaki, -
|
||||
Zombie Giant, 7, B, 5|5, -, Creature - Zombie Giant, Igor Kieryluk, -
|
||||
Elemental, 8, R, 7|1, -, Creature - Elemental, Anthony Francisco, Trample‚ haste
|
||||
Beast, 9, G, 4|4, -, Creature - Beast, Steve Prescott, -
|
||||
Snake, 10, G, 1|1, -, Creature - Snake, Austin Hsu, -
|
||||
Wolf, 11, G, 2|2, -, Creature - Wolf, Daren Bader, -
|
||||
|
||||
DDD - Duel Decks: Garruk vs. Liliana (2009-10-30)
|
||||
|
||||
Beast, T1, G, 3|3, -, Creature - Beast, John Donahue, -
|
||||
Beast, T2, G, 4|4, -, Creature - Beast, Steve Prescott, -
|
||||
Elephant, T3, G, 3|3, -, Creature - Elephant, Arnie Swekel, -
|
||||
|
||||
WWK - Worldwake (2010-02-05)
|
||||
|
||||
Soldier Ally, 1, W, 1|1, -, Creature - Soldier Ally, Kekai Kotaki, -
|
||||
Dragon, 2, R, 5|5, -, Creature - Dragon, Raymond Swanland, Flying
|
||||
Ogre, 3, R, 3|3, -, Creature - Ogre, Paul Bonner, -
|
||||
Elephant, 4, G, 3|3, -, Creature - Elephant, Lars Grant-West, -
|
||||
Plant, 5, G, -, -, Creature - Plant, Daren Bader, -
|
||||
Construct, 6, -, 6|12, -, Artifact Creature - Construct, Jung Park, Trample
|
||||
|
||||
DDE - Duel Decks: Phyrexia vs. the Coalition (2010-03-19)
|
||||
|
||||
Hornet, T1, -, 1|1, -, Artifact Creature - Insect, Ron Spencer, Flying‚ haste
|
||||
Minion, T2, B, *|*, -, Creature - Minion, Dave Kendall, -
|
||||
Saproling, T3, G, 1|1, -, Creature - Saproling, Warren Mahy, -
|
||||
|
||||
ROE - Rise of the Eldrazi (2010-04-23)
|
||||
|
||||
Eldrazi Spawn, 1a, -, -, -, Creature - Eldrazi Spawn, Aleksi Briclot, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Spawn, 1b, -, -, -, Creature - Eldrazi Spawn, Mark Tedin, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Spawn, 1c, -, -, -, Creature - Eldrazi Spawn, Veronique Meignaud, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Elemental, 2, R, *|*, -, Creature - Elemental, Jung Park, -
|
||||
Hellion, 3, R, 4|4, -, Creature - Hellion, Anthony Francisco, -
|
||||
Ooze, 4, G, *|*, -, Creature - Ooze, Daniel Ljunggren, -
|
||||
Tuktuk The Returned, 5, -, 5|5, -, Legendary Artifact Creature - Goblin Golem, Franz Vohwinkel, -
|
||||
|
||||
M11 - Magic 2011 (2010-07-16)
|
||||
|
||||
Avatar, 1, W, *|*, -, Creature - Avatar, Vance Kovacs, This creature's power and toughness are each equal to your life total.
|
||||
Bird, 2, W, 3|3, -, Creature - Bird, Paul Bonner, Flying
|
||||
Zombie, 3, B, 2|2, -, Creature - Zombie, Bud Cook, -
|
||||
Beast, 4, G, 3|3, -, Creature - Beast, John Donahue, -
|
||||
Ooze, 5, G, 2|2, -, Creature - Ooze, Raymond Swanland, When this creature dies‚ put two 1/1 green Ooze creature tokens onto the battlefield.
|
||||
Ooze, 6, G, 1|1, -, Creature - Ooze, Raymond Swanland, -
|
||||
|
||||
DDF - Duel Decks: Elspeth vs. Tezzeret (2010-09-03)
|
||||
|
||||
Soldier, T1, W, 1|1, -, Creature - Soldier, Parente, -
|
||||
|
||||
SOM - Scars of Mirrodin (2010-10-01)
|
||||
|
||||
Cat, 1, W, 2|2, -, Creature - Cat, Scott Chou, -
|
||||
Soldier, 2, W, 1|1, -, Creature - Soldier, Goran Josic, -
|
||||
Goblin, 3, R, 1|1, -, Creature - Goblin, Goran Josic, -
|
||||
Insect, 4, G, 1|1, -, Creature - Insect, Adrian Smith, Infect
|
||||
Wolf, 5, G, 2|2, -, Creature - Wolf, Chris Rahn, -
|
||||
Golem, 6, -, 3|3, -, Artifact Creature - Golem, Nic Klein, -
|
||||
Myr, 7, -, 1|1, -, Artifact Creature - Myr, Ryan Pancoast, -
|
||||
Wurm, 8, -, 3|3, -, Artifact Creature - Wurm, Raymond Swanland, Deathtouch
|
||||
Wurm, 9, -, 3|3, -, Artifact Creature - Wurm, Raymond Swanland, Lifelink
|
||||
Poison Counter, -, -, -, -, Emblem, -, -
|
||||
|
||||
MBS - Mirrodin Besieged (2011-02-04)
|
||||
|
||||
Germ, 1, B, -, -, Creature - Germ, Igor Kieryluk, -
|
||||
Zombie, 2, B, 2|2, -, Creature - Zombie, Dave Kendall, -
|
||||
Golem, 3, -, 9|9, -, Artifact Creature - Golem, Svetlin Velinov, -
|
||||
Horror, 4, -, *|*, -, Artifact Creature - Horror, Scott Chou, -
|
||||
Thopter, 5, -, 1|1, -, Artifact Creature - Thopter, Volkan Baga, Flying
|
||||
Poison Counter, -, -, -, -, Emblem, -, -
|
||||
|
||||
DDG - Duel Decks: Knights vs. Dragons (2011-04-01)
|
||||
|
||||
Goblin, T1, R, 1|1, -, Creature - Goblin, Brandon Kitkouski, -
|
||||
|
||||
NPH - New Phyrexia (2011-05-13)
|
||||
|
||||
Beast, 1, G, 3|3, -, Creature - Beast, Dave Allsop, -
|
||||
Goblin, 2, R, 1|1, -, Creature - Goblin, Jaime Jones, -
|
||||
Golem, 3, -, 3|3, -, Artifact Creature - Golem, Volkan Baga, -
|
||||
Myr, 4, -, 1|1, -, Artifact Creature - Myr, Matt Stewart, -
|
||||
Poison Counter, -, -, -, -, Emblem, -, -
|
||||
|
||||
M12 - Magic 2012 (2011-07-15)
|
||||
|
||||
Bird, 1, W, 3|3, -, Creature - Bird, Paul Bonner, Flying
|
||||
Soldier, 2, W, 1|1, -, Creature - Soldier, Parente, -
|
||||
Zombie, 3, B, 2|2, -, Creature - Zombie, Carl Critchlow, -
|
||||
Beast, 4, G, 3|3, -, Creature - Beast, John Donahue, -
|
||||
Saproling, 5, G, 1|1, -, Creature - Saproling, Cyril Van Der Haegen, -
|
||||
Wurm, 6, G, 6|6, -, Creature - Wurm, Anthony Francisco, -
|
||||
Pentavite, 7, -, 1|1, -, Artifact Creature - Pentavite, Greg Staples, Flying
|
||||
|
||||
DDH - Duel Decks: Ajani vs. Nicol Bolas (2011-09-02)
|
||||
|
||||
Griffin, T1, W, 2|2, -, Creature - Griffin, Jim Nelson, Flying
|
||||
Saproling, T2, G, 1|1, -, Creature - Saproling, Cyril Van Der Haegen, -
|
||||
|
||||
ISD - Innistrad (2011-09-30)
|
||||
|
||||
Angel, 1, W, 4|4, -, Creature - Angel, Winona Nelson, Flying
|
||||
Spirit, 2, W, 1|1, -, Creature - Spirit, Kev Walker, Flying
|
||||
Homunculus, 3, U, 2|2, -, Creature - Homunculus, Johann Bodin, -
|
||||
Demon, 4, B, 5|5, -, Creature - Demon, Kev Walker, Flying
|
||||
Vampire, 5, B, 2|2, -, Creature - Vampire, Svetlin Velinov, Flying
|
||||
Wolf, 6, B, 1|1, -, Creature - Wolf, Daniel Ljunggren, Deathtouch
|
||||
Zombie, 7, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
Zombie, 8, B, 2|2, -, Creature - Zombie, Christopher Moeller, -
|
||||
Zombie, 9, B, 2|2, -, Creature - Zombie, Cynthia Sheppard, -
|
||||
Ooze, 10, G, *|*, -, Creature - Ooze, Erica Yang, This creature's power and toughness are each equal to the number of slime counters on Gutter Grime.
|
||||
Spider, 11, G, 1|2, -, Creature - Spider, Daniel Ljunggren, Reach
|
||||
Wolf, 12, G, 2|2, -, Creature - Wolf, David Palumbo, -
|
||||
Wolf, T12, G, 2|2, Judge, Creature - Wolf, David Palumbo, -
|
||||
|
||||
DKA - Dark Ascension (2012-02-03)
|
||||
|
||||
Human, 1, W, 1|1, -, Creature - Human, John Stanko, -
|
||||
Vampire, 2, B, 1|1, -, Creature - Vampire, Peter Mohrbacher, Lifelink
|
||||
Sorin Emblem, 3, -, -, -, Emblem - Sorin, Michael Komrack, Creatures you control get +1/+0.
|
||||
|
||||
DDI - Duel Decks: Venser vs. Koth (2012-03-30)
|
||||
|
||||
Koth Emblem, E1, -, -, -, Emblem - Koth, Eric Deschamps, Mountains you control have Tap: This land deals 1 damage to target creature or player.'
|
||||
Venser Emblem, E2, -, -, -, Emblem - Venser, Eric Deschamps, Whenever you cast a spell‚ exile target permanent.
|
||||
|
||||
FNM - Friday Night Magic (2012-04-01)
|
||||
|
||||
Human, T1a, W, 1|1, Full Moon, Creature - Human, Lars Grant-West, -
|
||||
Wolf, T1b, G, 2|2, Full Moon, Creature - Wolf, Lars Grant-West, -
|
||||
|
||||
AVR - Avacyn Restored (2012-05-04)
|
||||
|
||||
Angel, 1, W, 4|4, -, Creature - Angel, Anthony Palumbo, Flying
|
||||
Human, 2, W, 1|1, -, Creature - Human, Michael C. Hayes, -
|
||||
Spirit, 3, W, 1|1, -, Creature - Spirit, Ryan Yee, Flying
|
||||
Spirit, 4, U, 1|1, -, Creature - Spirit, Dan Scott, Flying
|
||||
Demon, 5, B, 5|5, -, Creature - Demon, Kev Walker, Flying
|
||||
Zombie, 6, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
Human, 7, R, 1|1, -, Creature - Human, Ryan Pancoast, Haste
|
||||
Tamiyo Emblem, 8, -, -, -, Emblem - Tamiyo, Eric Deschamps, You have no maximum hand size. Whenever a card is put into your graveyard from anywhere‚ you may return it to your hand.
|
||||
Angel, T1, W, 4|4, Pre-Release, Creature - Angel, James Ryman, Flying
|
||||
Angel, T1F, W, 4|4, Pre-Release, Creature - Angel, James Ryman, Flying
|
||||
Demon, T5, B, 5|5, Pre-Release, Creature - Demon, Karl Kopinski, Flying
|
||||
Demon, T5F, B, 5|5, Pre-Release, Creature - Demon, Karl Kopinski, Flying
|
||||
|
||||
M13 - Magic 2013 (2012-07-13)
|
||||
|
||||
Goblin, 1, R, 1|1, League, Creature - Goblin, Jim Nelson, -
|
||||
Cat, 1, W, 2|2, -, Creature - Cat, Jesper Ejsing, -
|
||||
Goat, 2, W, -, -, Creature - Goat, Adam Paquette, -
|
||||
Soldier, 3, W, 1|1, -, Creature - Soldier, Greg Staples, -
|
||||
Drake, 4, U, 2|2, -, Creature - Drake, Svetlin Velinov, Flying
|
||||
Zombie, 5, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
Goblin, 6, R, 1|1, -, Creature - Goblin, Karl Kopinski, -
|
||||
Hellion, 7, R, 4|4, -, Creature - Hellion, Anthony Francisco, -
|
||||
Beast, 8, G, 3|3, -, Creature - Beast, John Donahue, -
|
||||
Saproling, 9, G, 1|1, -, Creature - Saproling, Brad Rigney, -
|
||||
Wurm, 10, G, 6|6, -, Creature - Wurm, Anthony Francisco, -
|
||||
Liliana Emblem, 11, -, -, -, Emblem - Liliana, D. Alexander Gregory, Swamps you control have Tap: Add {B}{B}{B}{B} to your mana pool.'
|
||||
|
||||
DDJ - Duel Decks: Izzet vs. Golgari (2012-09-07)
|
||||
|
||||
Saproling, T1, G, 1|1, -, Creature - Saproling, Brad Rigney, -
|
||||
|
||||
RTR - Return to Ravnica (2012-10-05)
|
||||
|
||||
Centaur, 1, G, 3|3, Judge, Creature - Centaur, James Ryman, -
|
||||
Knight, 1, W, 2|2, League, Creature - Knight, Lucas Graciano, Vigilance
|
||||
Bird, 1, W, 1|1, -, Creature - Bird, James Ryman, Flying
|
||||
Knight, 2, W, 2|2, -, Creature - Knight, Matt Stewart, Vigilance
|
||||
Soldier, 3, W, 1|1, -, Creature - Soldier, Steve Prescott, -
|
||||
Assassin, 4, B, 1|1, -, Creature - Assassin, Svetlin Velinov, Whenever this creature deals combat damage to a player‚ that player loses the game.
|
||||
Dragon, 5, R, 6|6, -, Creature - Dragon, Mark Zug, Flying
|
||||
Goblin, 6, R, 1|1, -, Creature - Goblin, Christopher Moeller, -
|
||||
Centaur, 7, G, 3|3, -, Creature - Centaur, Slawomir Maniak, -
|
||||
Ooze, 8, G, *|*, -, Creature - Ooze, Marco Nelor, -
|
||||
Rhino, 9, G, 4|4, -, Creature - Rhino, Tomasz Jedruszek, Trample
|
||||
Saproling, 10, G, 1|1, -, Creature - Saproling, Raoul Vitale, -
|
||||
Wurm, 11, G, 5|5, -, Creature - Wurm, Anthony Palumbo, Trample
|
||||
Elemental, 12, G W, 8|8, -, Creature - Elemental, Yeong-Hao Han, Vigilance
|
||||
|
||||
GTC - Gatecrash (2013-02-01)
|
||||
|
||||
Soldier, 1, R W, 1|1, League, Creature - Soldier, Zoltan Boros, Haste
|
||||
Angel, 1, W, 4|4, -, Creature - Angel, Steve Argyle, Flying
|
||||
Rat, 2, B, 1|1, -, Creature - Rat, Nils Hamm, -
|
||||
Frog Lizard, 3, G, 3|3, -, Creature - Frog Lizard, Jack Wang, -
|
||||
Cleric, 4, W B, 1|1, -, Creature - Cleric, Jason Chan, {3}{W}{B}{B}‚ {T}‚ Sacrifice this creature: Return a card named Deathpact Angel from your graveyard to the battlefield.
|
||||
Horror, 5, U B, 1|1, -, Creature - Horror, Adam Paquette, Flying
|
||||
Soldier, 6, R W, 1|1, -, Creature - Soldier, David Palumbo, Haste
|
||||
Spirit, 7, W B, 1|1, -, Creature - Spirit, Cliff Childs, Flying
|
||||
Domri Emblem, 8, -, -, -, Emblem - Domri, Tyler Jacobson, Creatures you control have double strike‚ trample‚ hexproof‚ and haste.
|
||||
|
||||
DDK - Duel Decks: Sorin vs. Tibalt (2013-03-15)
|
||||
|
||||
Spirit, T1, W, 1|1, -, Creature - Spirit, Ryan Yee, Flying
|
||||
|
||||
DGM - Dragon's Maze (2013-05-03)
|
||||
|
||||
Bird, 1, W, 1|1, League, Creature - Bird, Martina Pilcerova, Flying
|
||||
Elemental, 1, G W, *|*, -, Creature - Elemental, Mark Winters, This creature's power and toughness are each equal to the number of creatures you control.
|
||||
|
||||
MMA - Modern Masters (2013-06-07)
|
||||
|
||||
Giant Warrior, 1, W, 5|5, -, Creature - Giant Warrior, Svetlin Velinov, -
|
||||
Kithkin Soldier, 2, W, 1|1, -, Creature - Kithkin Soldier, Randy Gallegos, -
|
||||
Soldier, 3, W, 1|1, -, Creature - Soldier, Goran Josic, -
|
||||
Illusion, 4, U, 1|1, -, Creature - Illusion, Veronique Meignaud, -
|
||||
Bat, 5, B, 1|1, -, Creature - Bat, Wayne Reynolds, Flying
|
||||
Goblin Rogue, 6, B, 1|1, -, Creature - Goblin Rogue, Dave Kendall, -
|
||||
Spider, 7, B, 2|4, -, Creature - Spider, Lars Grant-West, Reach
|
||||
Zombie, 8, B, 2|2, -, Creature - Zombie, Bud Cook, -
|
||||
Dragon, 9, R, 4|4, -, Creature - Dragon, Vance Kovacs, Flying
|
||||
Goblin, 10, R, 1|1, -, Creature - Goblin, Dave Kendall, -
|
||||
Elemental, 11, G, 4|4, -, Creature - Elemental, Brandon Kitkouski, -
|
||||
Saproling, 12, G, 1|1, -, Creature - Saproling, Warren Mahy, -
|
||||
Treefolk Shaman, 13, G, 2|5, -, Creature - Treefolk Shaman, Zack Stella, -
|
||||
Faerie Rogue, 14, U B, 1|1, -, Creature - Faerie Rogue, E. M. Gist, Flying
|
||||
Worm, 15, B G, 1|1, -, Creature - Worm, Chuck Lukacs, -
|
||||
Elspeth Emblem, 16, -, -, -, Emblem - Elspeth, Volkan Baga, Artifacts‚ creatures‚ enchantments‚ and lands you control have indestructible.
|
||||
|
||||
M14 - Magic 2014 Core Set (2013-07-19)
|
||||
|
||||
Sliver, 1, -, 1|1, -, Creature - Sliver, Igor Kieryluk, -
|
||||
Angel, 1, W, 4|4, -, Creature - Angel, James Ryman, Flying
|
||||
Cat, 3, W, 2|2, -, Creature - Cat, Jesper Ejsing, -
|
||||
Goat, 4, W, -, -, Creature - Goat, Adam Paquette, -
|
||||
Zombie, 5, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
Dragon, 6, R, 2|2, -, Creature - Dragon, Jack Wang, Flying {R}: This creature gets +1/+0 until end of turn.
|
||||
Elemental, 7, R, 1|1, -, Creature - Elemental, Jaime Jones, -
|
||||
Elemental, 8, R, 1|1, -, Creature - Elemental, Winona Nelson, -
|
||||
Beast, 9, G, 3|3, -, Creature - Beast, John Donahue, -
|
||||
Saproling, 10, G, 1|1, -, Creature - Saproling, Brad Rigney, -
|
||||
Wolf, 11, G, 2|2, -, Creature - Wolf, Lars Grant-West, -
|
||||
Liliana Emblem, 12, -, -, -, Emblem - Liliana, D. Alexander Gregory, Swamps you control have Tap: Add {B}{B}{B}{B} to your mana pool.'
|
||||
Garruk Emblem, 13, -, -, -, Emblem - Garruk, Karl Kopinski, Whenever you cast a creature spell‚ you may search your library for a creature card‚ put it onto the battlefield‚ then shuffle your library.
|
||||
Sliver, T1, -, 1|1, League, Creature - Sliver, Vincent Proce, -
|
||||
|
||||
DDL - Duel Decks: Heroes vs. Monsters (2013-09-06)
|
||||
|
||||
Griffin, T1, W, 2|2, -, Creature - Griffin, Johann Bodin, Flying
|
||||
Beast, T2, G, 3|3, -, Creature - Beast, Jesper Ejsing, -
|
||||
|
||||
THS - Theros (2013-09-27)
|
||||
|
||||
Golem, 1, -, 3|3, Judge, Enchantment Artifact Creature - Golem, Yeong-Hao Han, -
|
||||
Soldier, 1, W, 1|1, League, Creature - Soldier, Johann Bodin, -
|
||||
Cleric, 1, W, 2|1, -, Enchantment Creature - Cleric, Johann Bodin, -
|
||||
Soldier, 2, W, 1|1, -, Creature - Soldier, Seb McKinnon, -
|
||||
Soldier, 3, W, 1|1, -, Creature - Soldier, Svetlin Velinov, -
|
||||
Bird, 4, U, 2|2, -, Creature - Bird, Peter Mohrbacher, Flying
|
||||
Elemental, 5, U, 1|0, -, Creature - Elemental, Karl Kopinski, -
|
||||
Harpy, 6, B, 1|1, -, Creature - Harpy, Nils Hamm, Flying
|
||||
Soldier, 7, R, 1|1, -, Creature - Soldier, Johann Bodin, -
|
||||
Boar, 8, G, 2|2, -, Creature - Boar, James Ryman, -
|
||||
Satyr, 9, R G, 2|2, -, Creature - Satyr, Johann Bodin, -
|
||||
Golem, 10, -, 3|3, -, Enchantment Artifact Creature - Golem, Yeong-Hao Han, -
|
||||
Elspeth Emblem, 11, -, -, -, Emblem - Elspeth, Eric Deschamps, Creatures you control get +2/+2 and have flying.
|
||||
|
||||
BNG - Born of the Gods (2014-02-07)
|
||||
|
||||
Soldier, 1, W, 1|1, League, Enchantment Creature - Soldier, Ryan Barger, -
|
||||
Bird, 1, W, 1|1, -, Creature - Bird, Clint Cearly, Flying
|
||||
Cat Soldier, 2, W, 1|1, -, Creature - Cat Soldier, Scott Chou, Vigilance
|
||||
Soldier, 3, W, 1|1, -, Enchantment Creature - Soldier, David Palumbo, -
|
||||
Bird, 4, U, 2|2, -, Enchantment Creature - Bird, Mike Sass, Flying
|
||||
Kraken, 5, U, 9|9, -, Creature - Kraken, Dan Scott, -
|
||||
Zombie, 6, B, 2|2, -, Enchantment Creature - Zombie, Winona Nelson, -
|
||||
Elemental, 7, R, 3|1, -, Enchantment Creature - Elemental, Greg Staples, -
|
||||
Centaur, 8, G, 3|3, -, Enchantment Creature - Centaur, Ryan Barger, -
|
||||
Wolf, 9, G, 2|2, -, Creature - Wolf, Raoul Vitale, -
|
||||
Gold, 10, -, -, -, Artifact, Richard Wright, Sacrifice this artifact: Add one mana of any color to your mana pool.
|
||||
Kiora Emblem, 11, -, -, -, Emblem - Kiora, Scott M. Fischer, At the beginning of your end step‚ put a 9/9 blue Kraken creature token onto the battlefield.
|
||||
|
||||
DDM - Duel Decks: Jace vs. Vraska (2014-03-14)
|
||||
|
||||
Assassin, T1, B, 1|1, -, Creature - Assassin, Svetlin Velinov, Whenever this creature deals combat damage to a player‚ that player loses the game.
|
||||
|
||||
JOU - Journey into Nyx (2014-05-02)
|
||||
|
||||
Minotaur, 1, R, 2|3, League, Creature - Minotaur, Scott Murphy, -
|
||||
Sphinx, 1, U, 4|4, -, Creature - Sphinx, Jesper Ejsing, Flying
|
||||
Zombie, 2, B, *|*, -, Creature - Zombie, Zack Stella, -
|
||||
Minotaur, 3, R, 2|3, -, Creature - Minotaur, Craig J Spearing, -
|
||||
Hydra, 4, G, *|*, -, Creature - Hydra, Steve Prescott, -
|
||||
Spider, 5, G, 1|3, -, Enchantment Creature - Spider, Yohann Schepacz, Reach
|
||||
Snake, 6, G B, 1|1, -, Enchantment Creature - Snake, Greg Staples, Deathtouch
|
||||
|
||||
MD1 - Modern Event Deck 2014 (2014-05-30)
|
||||
|
||||
Soldier, 1, W, 1|1, -, Creature - Soldier, Goran Josic, -
|
||||
Spirit, 2, W, 1|1, -, Creature - Spirit, Kev Walker, Flying
|
||||
Myr, 3, -, 1|1, -, Artifact Creature - Myr, Matt Stewart, -
|
||||
Elspeth Emblem, 4, -, -, -, Emblem - Elspeth, Volkan Baga, Artifacts‚ creatures‚ enchantments‚ and lands you control have indestructible.
|
||||
|
||||
CNS - Conspiracy (2014-06-06)
|
||||
|
||||
Spirit, 1, W, 1|1, -, Creature - Spirit, Jeff Simpson, Flying
|
||||
Demon, 2, B, *|*, -, Creature - Demon, Evan Shipard, Flying
|
||||
Zombie, 3, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
Ogre, 4, R, 4|4, -, Creature - Ogre, Dave Kendall, -
|
||||
Elephant, 5, G, 3|3, -, Creature - Elephant, Lars Grant-West, -
|
||||
Squirrel, 6, G, 1|1, -, Creature - Squirrel, Daniel Ljunggren, -
|
||||
Wolf, 7, G, 2|2, -, Creature - Wolf, Raoul Vitale, -
|
||||
Construct, 8, -, 1|1, -, Artifact Creature - Construct, Adam Paquette, Defender
|
||||
Dack Emblem, 9, -, -, -, Emblem - Dack, Eric Deschamps, Whenever you cast a spell that targets one or more permanents‚ gain control of those permanents.
|
||||
|
||||
M15 - Magic 2015 Core Set (2014-07-18)
|
||||
|
||||
Wolf, 001, G, 1|1, Pre-Release, Creature - Wolf, David Palumbo, -
|
||||
Sliver, 001, -, 1|1, -, Creature - Sliver, Igor Kieryluk, -
|
||||
Squid, 001, U, 1|1, League, Creature - Squid, Richard Wright, Islandwalk
|
||||
Soldier, 002, W, 1|1, -, Creature - Soldier, Greg Staples, -
|
||||
Spirit, 003, W, 1|1, -, Creature - Spirit, Mike Sass, Flying
|
||||
Squid, 004, U, 1|1, -, Creature - Squid, Jack Wang, Islandwalk
|
||||
Beast, 005, B, 3|3, -, Creature - Beast, John Donahue, Deathtouch
|
||||
Zombie, 006, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
Dragon, 007, R, 2|2, -, Creature - Dragon, Jack Wang, Flying {R}: This creature gets +1/+0 until end of turn.
|
||||
Goblin, 008, R, 1|1, -, Creature - Goblin, Karl Kopinski, -
|
||||
Beast, 009, G, 3|3, -, Creature - Beast, Dave Kendall, -
|
||||
Insect, 010, G, 1|1, -, Creature - Insect, Martina Pilcerova, Flying‚ deathtouch
|
||||
Treefolk Warrior, 011, G, *|*, -, Creature - Treefolk Warrior, Todd Lockwood, This creature's power and toughness are each equal to the number of Forests you control.
|
||||
Land Mine, 012, -, -, -, Artifact, Kev Walker, {R}‚ Sacrifice this artifact: This artifact deals 2 damage to target attacking creature without flying.
|
||||
Ajani Emblem, 013, -, -, -, Emblem - Ajani, Chris Rahn, If a source would deal damage to you or a planeswalker you control‚ prevent all but 1 of that damage.
|
||||
Garruk Emblem, 014, -, -, -, Emblem - Garruk, Tyler Jacobson, Whenever a creature attacks you‚ it gets +5/+5 and gains trample until end of turn.
|
||||
|
||||
DDN - Duel Decks: Speed vs. Cunning (2014-09-05)
|
||||
|
||||
Goblin, 082, R, 1|1, -, Creature - Goblin, Karl Kopinski, -
|
||||
|
||||
KTK - Khans of Tarkir (2014-09-26)
|
||||
|
||||
Warrior, 001, W, 1|1, League, Creature - Warrior, Winona Nelson, -
|
||||
Bird, 001, W, 3|4, -, Creature - Bird, Mark Zug, Flying
|
||||
Spirit, 002, W, 1|1, -, Creature - Spirit, Mike Sass, Flying
|
||||
Warrior, 003, W, 1|1, -, Creature - Warrior, Ryan Barger, -
|
||||
Warrior, 004, W, 1|1, -, Creature - Warrior, Yefim Kligerman, -
|
||||
Vampire, 005, B, 2|2, -, Creature - Vampire, Cynthia Sheppard, Flying
|
||||
Zombie, 006, B, 2|2, -, Creature - Zombie, Wayne Reynolds, -
|
||||
Goblin, 007, R, 1|1, -, Creature - Goblin, Kev Walker, -
|
||||
Bear, 008, G, 4|4, -, Creature - Bear, Kev Walker, -
|
||||
Snake, 009, G, 1|1, -, Creature - Snake, Lars Grant-West, -
|
||||
Spirit Warrior, 010, B G, *|*, -, Creature - Spirit Warrior, Ryan Alexander Lee, -
|
||||
Morph, 011, -, 2|2, -, Creature, Raymond Swanland, (You can cover a face-down creature with this reminder card. A card with morph can be turned face up any time for its morph cost.)
|
||||
Sarkhan Emblem, 012, -, -, -, Emblem - Sarkhan, Daarken, At the beginning of your draw step‚ draw two additional cards. At the beginning of your end step‚ discard your hand.
|
||||
Sorin Emblem, 013, -, -, -, Emblem - Sorin, Cynthia Sheppard, At the beginning of each opponent's upkeep‚ that player sacrifices a creature.
|
||||
|
||||
C14 - Commander 2014 (2014-11-07)
|
||||
|
||||
Angel, 001, W, 4|4, -, Creature - Angel, Anthony Palumbo, Flying
|
||||
Cat, 002, W, 2|2, -, Creature - Cat, Scott Chou, -
|
||||
Goat, 003, W, -, -, Creature - Goat, Adam Paquette, -
|
||||
Kor Soldier, 004, W, 1|1, -, Creature - Kor Soldier, Daren Bader, -
|
||||
Pegasus, 005, W, 1|1, -, Creature - Pegasus, Greg Hildebrandt, Flying
|
||||
Soldier, 006, W, 1|1, -, Creature - Soldier, Goran Josic, -
|
||||
Spirit, 007, W, 1|1, -, Creature - Spirit, Ryan Yee, Flying
|
||||
Fish, 008, U, 3|3, -, Creature - Fish, Dan Scott, When this creature dies‚ put a 6/6 blue Whale creature token onto the battlefield with "When this creature dies‚ put a 9/9 blue Kraken creature token onto the battlefield."
|
||||
Kraken, 009, U, 9|9, -, Creature - Kraken, Dan Scott, -
|
||||
Whale, 010, U, 6|6, -, Creature - Whale, Dan Scott, When this creature dies‚ put a 9/9 blue Kraken creature token onto the battlefield.
|
||||
Zombie, 011, U, *|*, -, Creature - Zombie, Dave Kendall, -
|
||||
Demon, 012, B, *|*, -, Creature - Demon, Pete Venters, Flying
|
||||
Demon, 013, B, 5|5, -, Creature - Demon, Kev Walker, Flying
|
||||
Germ, 014, B, -, -, Creature - Germ, Igor Kieryluk, -
|
||||
Horror, 015, B, *|*, -, Creature - Horror, Jason Felix, -
|
||||
Zombie, 016, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
Goblin, 017, R, 1|1, -, Creature - Goblin, Dave Kendall, -
|
||||
Ape, 018, G, 3|3, -, Creature - Ape, Lars Grant-West, -
|
||||
Beast, 019, G, 3|3, -, Creature - Beast, Dave Allsop, -
|
||||
Beast, 020, G, 4|4, -, Creature - Beast, Steve Prescott, -
|
||||
Elemental, 021, G, 5|3, -, Creature - Elemental, Nils Hamm, -
|
||||
Elephant, 022, G, 3|3, -, Creature - Elephant, Lars Grant-West, -
|
||||
Elf Druid, 023, G, 1|1, -, Creature - Elf Druid, Raymond Swanland, {T}: Add {G} to your mana pool.
|
||||
Elf Warrior, 024, G, 1|1, -, Creature - Elf Warrior, William O'Connor, -
|
||||
Treefolk, 025, G, *|*, -, Creature - Treefolk, Filip Burburan, -
|
||||
Wolf, 026, G, 2|2, -, Creature - Wolf, Daren Bader, -
|
||||
Gargoyle, 027, -, 3|4, -, Artifact Creature - Gargoyle, Paul Bonner, Flying
|
||||
Myr, 028, -, 1|1, -, Artifact Creature - Myr, Ryan Pancoast, -
|
||||
Pentavite, 029, -, 1|1, -, Artifact Creature - Pentavite, Greg Staples, Flying
|
||||
Stoneforged Blade, 030, -, -, -, Artifact - Equipment, Eric Deschamps, Indestructible Equipped creature gets +5/+5 and has double strike. Equip {0}
|
||||
Tuktuk The Returned, 031, -, 5|5, -, Legendary Artifact Creature - Goblin Golem, Franz Vohwinkel, -
|
||||
Wurm, 032, -, 3|3, -, Artifact Creature - Wurm, Raymond Swanland, Deathtouch
|
||||
Wurm, 033, -, 3|3, -, Artifact Creature - Wurm, Raymond Swanland, Lifelink
|
||||
Teferi Emblem, 034, -, -, -, Emblem - Teferi, Tyler Jacobson, You may activate loyalty abilities of planeswalkers you control on any player's turn any time you could cast an instant.
|
||||
Nixilis Emblem, 035, -, -, -, Emblem - Nixilis, Daarken, {1}{B}‚ Sacrifice a creature: You gain X life and draw X cards‚ where X is the sacrificed creature's power.
|
||||
Daretti Emblem, 036, -, -, -, Emblem - Daretti, Dan Scott, Whenever an artifact is put into your graveyard from the battlefield‚ return that card to the battlefield at the beginning of the next end step.
|
||||
|
||||
DD3_EVG - Duel Decks Anthology‚ Elves vs. Goblins (2014-12-05)
|
||||
|
||||
Elemental, 001, G, 7|7, -, Creature - Elemental, Anthony S. Waters, Trample
|
||||
Elf Warrior, 002, G, 1|1, -, Creature - Elf Warrior, Dominick Domingo, -
|
||||
Goblin, 003, R, 1|1, -, Creature - Goblin, Dave Kendall, -
|
||||
|
||||
DD3_JVC - Duel Decks Anthology‚ Jace vs. Chandra (2014-12-05)
|
||||
|
||||
Elemental Shaman, 004, R, 3|1, -, Creature - Elemental Shaman, Jim Pavelec, -
|
||||
|
||||
DD3_DVD - Duel Decks Anthology‚ Divine vs. Demonic (2014-12-05)
|
||||
|
||||
Spirit, 005, W, 1|1, -, Creature - Spirit, Luca Zontini, Flying
|
||||
Demon, 006, B, *|*, -, Creature - Demon, Pete Venters, Flying
|
||||
Thrull, 007, B, -, -, Creature - Thrull, Veronique Meignaud, -
|
||||
|
||||
DD3_GVL - Duel Decks Anthology‚ Garruk vs. Liliana (2014-12-05)
|
||||
|
||||
Beast, 008, G, 3|3, -, Creature - Beast, John Donahue, -
|
||||
Beast, 009, G, 4|4, -, Creature - Beast, Steve Prescott, -
|
||||
Elephant, 010, G, 3|3, -, Creature - Elephant, Arnie Swekel, -
|
||||
Bat, 011, B, 1|1, -, Creature - Bat, Wayne Reynolds, Flying
|
||||
|
||||
FRF - Fate Reforged (2015-01-23)
|
||||
|
||||
Monk, 001, W, 1|1, -, Creature - Monk, Steven Belledin, Prowess
|
||||
Monk, 001T, W, 1|1, League, Creature - Monk, Magali Villeneuve, Prowess
|
||||
Spirit, 002, W, 1|1, -, Creature - Spirit, Aaron Miller, Flying
|
||||
Warrior, 003, B, 2|1, -, Creature - Warrior, Zoltan Boros, -
|
||||
Manifest, 004, -, 2|2, -, Creature, Raymond Swanland, (You can cover a face-down manifested creature with this reminder card. A manifested creature card can be turned face up any time for its mana cost. A face-down card can also be turned face up for its morph cost.)
|
||||
|
||||
DDO - Duel Decks: Elspeth vs. Kiora (2015-02-27)
|
||||
|
||||
Soldier, 066, W, 1|1, -, Creature - Soldier, Svetlin Velinov, -
|
||||
Kraken, 067, U, 9|9, -, Creature - Kraken, Dan Scott, -
|
||||
|
||||
DTK - Dragons of Tarkir (2015-03-27)
|
||||
|
||||
Warrior, 001, W, 1|1, -, Creature - Warrior, Aaron Miller, -
|
||||
Djinn Monk, 002, U, 2|2, -, Creature - Djinn Monk, Izzy, Flying
|
||||
Zombie, 003, B, 2|2, -, Creature - Zombie, Vincent Proce, -
|
||||
Zombie Horror, 004, B, *|*, -, Creature - Zombie Horror, Nils Hamm, -
|
||||
Dragon, 005, R, 4|4, -, Creature - Dragon, Gabor Szikszai, Flying
|
||||
Goblin, 006, R, 1|1, -, Creature - Goblin, Mike Bierek, -
|
||||
Morph, 007, -, 2|2, -, Creature, Raymond Swanland, (You can cover a face-down creature with this reminder card. A card with morph can be turned face up any time for its morph cost.)
|
||||
Narset Emblem, 008, -, -, -, Emblem - Narset, Magali Villeneuve, Your opponents can't cast noncreature spells.
|
||||
|
||||
MM2 - Modern Masters 2015 Edition (2015-05-22)
|
||||
|
||||
Eldrazi Spawn, 001, -, -, -, Creature - Eldrazi Spawn, Aleksi Briclot, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Spawn, 002, -, -, -, Creature - Eldrazi Spawn, Mark Tedin, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Spawn, 003, -, -, -, Creature - Eldrazi Spawn, Veronique Meignaud, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Soldier, 004, W, 1|1, -, Creature - Soldier, Greg Staples, -
|
||||
Spirit, 005, W, 1|1, -, Creature - Spirit, Mike Sass, Flying
|
||||
Faerie Rogue, 006, B, 1|1, -, Creature - Faerie Rogue, Dave Allsop, Flying
|
||||
Germ, 007, B, -, -, Creature - Germ, Igor Kieryluk, -
|
||||
Thrull, 008, B, 1|1, -, Creature - Thrull, Mark Tedin, -
|
||||
Elephant, 009, G, 3|3, -, Creature - Elephant, Lars Grant-West, -
|
||||
Insect, 010, G, 1|1, -, Creature - Insect, Ron Spencer, -
|
||||
Saproling, 011, G, 1|1, -, Creature - Saproling, Warren Mahy, -
|
||||
Snake, 012, G, 1|1, -, Creature - Snake, Austin Hsu, -
|
||||
Wolf, 013, G, 2|2, -, Creature - Wolf, Daren Bader, -
|
||||
Worm, 014, B G, 1|1, -, Creature - Worm, Chuck Lukacs, -
|
||||
Golem, 015, -, 3|3, -, Artifact Creature - Golem, Nic Klein, -
|
||||
Myr, 016, -, 1|1, -, Artifact Creature - Myr, Ryan Pancoast, -
|
||||
|
||||
ORI - Magic Origins (2015-07-17)
|
||||
|
||||
Angel, 001, W, 4|4, -, Creature - Angel, Cyril Van Der Haegen, Flying
|
||||
Knight, 002, W, 2|2, -, Creature - Knight, Matt Stewart, Vigilance
|
||||
Soldier, 003, W, 1|1, -, Creature - Soldier, Steve Prescott, -
|
||||
Demon, 004, B, 5|5, -, Creature - Demon, Kev Walker, Flying
|
||||
Zombie, 005, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
Goblin, 006, R, 1|1, -, Creature - Goblin, Brandon Kitkouski, -
|
||||
Ashaya‚ the Awoken World, 007, G, 4|4, -, Legendary Creature - Elemental, Raymond Swanland, -
|
||||
Elemental, 008, G, 2|2, -, Creature - Elemental, Marco Nelor, -
|
||||
Elf Warrior, 009, G, 1|1, -, Creature - Elf Warrior, William O'Connor, -
|
||||
Thopter, 010, -, 1|1, -, Artifact Creature - Thopter, Adam Paquette, Flying
|
||||
Thopter, 011, -, 1|1, -, Artifact Creature - Thopter, Svetlin Velinov, Flying
|
||||
Jace Emblem, 012, -, -, -, Emblem - Jace, Jaime Jones, Whenever you cast a spell‚ target opponent puts the top five cards of his or her library into his or her graveyard.
|
||||
Liliana Emblem, 013, -, -, -, Emblem - Liliana, Karla Ortiz, Whenever a creature dies‚ return it to the battlefield under your control at the beginning of the next end step.
|
||||
Chandra Emblem, 014, -, -, -, Emblem - Chandra, Eric Deschamps, At the beginning of your upkeep‚ this emblem deals 3 damage to you.
|
||||
|
||||
DDP - Duel Decks: Zendikar vs. Eldrazi (2015-08-28)
|
||||
|
||||
Eldrazi Spawn, 076, -, -, -, Creature - Eldrazi Spawn, Aleksi Briclot, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Spawn, 077, -, -, -, Creature - Eldrazi Spawn, Veronique Meignaud, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Spawn, 078, -, -, -, Creature - Eldrazi Spawn, Mark Tedin, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Hellion, 079, R, 4|4, -, Creature - Hellion, Anthony Francisco, -
|
||||
Plant, 080, G, -, -, Creature - Plant, Daren Bader, -
|
||||
|
||||
BFZ - Battle for Zendikar (2015-10-09)
|
||||
|
||||
Eldrazi, 001, -, 10|10, -, Creature - Eldrazi, Jack Wang, -
|
||||
Eldrazi Scion, 002, -, 1|1, -, Creature - Eldrazi Scion, Izzy, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Scion, 003, -, 1|1, -, Creature - Eldrazi Scion, Winona Nelson, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Eldrazi Scion, 004, -, 1|1, -, Creature - Eldrazi Scion, Svetlin Velinov, Sacrifice this creature: Add {1} to your mana pool.
|
||||
Knight Ally, 005, W, 2|2, -, Creature - Knight Ally, Josu Hernaiz, -
|
||||
Kor Ally, 006, W, 1|1, -, Creature - Kor Ally, Jeremy Wilson, -
|
||||
Octopus, 007, U, 8|8, -, Creature - Octopus, Craig J Spearing, -
|
||||
Dragon, 008, R, 5|5, -, Creature - Dragon, Raymond Swanland, Flying
|
||||
Plant, 009, G, 1|1, -, Creature - Plant, Sam Burley, -
|
||||
Elemental, 009, R, 3|1, -, Creature - Elemental, Victor Adame Minguez, Trample‚ Haste
|
||||
Elemental, 011, G R, 5|5, -, Creature - Elemental, Brad Rigney, -
|
||||
Gideon Emblem, 012, -, -, -, Emblem - Gideon, Eric Deschamps, -
|
||||
Nixilis Emblem, 013, -, -, -, Emblem - Nixilis, Chris Rahn, -
|
||||
Kiora Emblem, 014, -, -, -, Emblem - Kiora, Jason Chan, -
|
||||
|
||||
C15 - Commander 2015 (2015-11-13)
|
||||
|
||||
Shapeshifter, 001, -, 1|1, -, Creature - Shapeshifter, Franz Vohwinkel, Changeling
|
||||
Angel, 002, W, 4|4, -, Creature - Angel, Cyril Van Der Haegen, Flying
|
||||
Cat, 003, W, 2|2, -, Creature - Cat, Jesper Ejsing, -
|
||||
Knight, 004, W, 2|2, -, Creature - Knight, Hideaki Takamura, First strike
|
||||
Knight, 005, W, 2|2, -, Creature - Knight, Matt Stewart, Vigilance
|
||||
Drake, 006, U, 2|2, -, Creature - Drake, Svetlin Velinov, Flying
|
||||
Germ, 007, B, -, -, Creature - Germ, Igor Kieryluk, -
|
||||
Zombie, 008, B, 2|2, -, Creature - Zombie, Lucas Graciano, -
|
||||
Dragon, 009, R, 5|5, -, Creature - Dragon, Jim Pavelec, Flying
|
||||
Elemental Shaman, 010, R, 3|1, -, Creature - Elemental Shaman, Jim Pavelec, -
|
||||
Lightning Rager, 011, R, 5|1, -, Creature - Elemental, Svetlin Velinov, Trample‚ Haste At the beginning of your end step‚ sacrifice this creature.
|
||||
Bear, 012, G, 2|2, -, Creature - Bear, Heather Hudson, -
|
||||
Beast, 013, G, 4|4, -, Creature - Beast, Svetlin Velinov, -
|
||||
Elephant, 014, G, 3|3, -, Creature - Elephant, Lars Grant-West, -
|
||||
Frog Lizard, 015, G, 3|3, -, Creature - Frog Lizard, Jack Wang, -
|
||||
Saproling, 016, G, 1|1, -, Creature - Saproling, Brad Rigney, -
|
||||
Snake, 017, G, 1|1, -, Creature - Snake, Dan Scott, -
|
||||
Spider, 018, G, 1|2, -, Creature - Spider, Daniel Ljunggren, Reach
|
||||
Wolf, 019, G, 2|2, -, Creature - Wolf, David Palumbo, -
|
||||
Elemental, 020, U R, 5|5, -, Creature - Elemental, Randy Gallegos, Flying
|
||||
Snake, 021, G U, 1|1, -, Creature - Snake, Christopher Moeller, -
|
||||
Spirit, 022, W B, 1|1, -, Creature - Spirit, Cliff Childs, Flying
|
||||
Spirit, 023, -, *|*, -, Enchantment Creature - Spirit, Adam Paquette, This creature's power and toughness are each equal to the number of experience counters you have.
|
||||
Gold, 024, -, -, -, Artifact, Richard Wright, Sacrifice this artifact: Add one mana of any color to your mana pool.
|
Can't render this file because it contains an unexpected character in line 549 and column 138.
|
|
@ -0,0 +1,32 @@
|
|||
package mage.client.game;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.mage.plugins.card.dl.sources.CardImageSource;
|
||||
import org.mage.plugins.card.dl.sources.TokensMtgImageSource;
|
||||
import org.mage.plugins.card.images.CardDownloadData;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Quercitron
|
||||
*/
|
||||
@Ignore
|
||||
public class TokensMtgImageSourceTest {
|
||||
|
||||
@Test
|
||||
public void generateTokenUrlTest() throws Exception {
|
||||
CardImageSource imageSource = TokensMtgImageSource.getInstance();
|
||||
|
||||
String url = imageSource.generateTokenUrl(new CardDownloadData("Thopter", "ORI", 0, false, 1, "ORI"));
|
||||
Assert.assertEquals("http://tokens.mtg.onl/tokens/ORI_010-Thopter.jpg", url);
|
||||
url = imageSource.generateTokenUrl(new CardDownloadData("Thopter", "ORI", 0, false, 2, "ORI"));
|
||||
Assert.assertEquals("http://tokens.mtg.onl/tokens/ORI_011-Thopter.jpg", url);
|
||||
|
||||
url = imageSource.generateTokenUrl(new CardDownloadData("Ashaya, the Awoken World", "ORI", 0, false, 0, "ORI"));
|
||||
Assert.assertEquals("http://tokens.mtg.onl/tokens/ORI_007-Ashaya,-the-Awoken-World.jpg", url);
|
||||
|
||||
url = imageSource.generateTokenUrl(new CardDownloadData("Emblem Gideon, Ally of Zendikar", "BFZ", 0, false, 0, null));
|
||||
Assert.assertEquals("http://tokens.mtg.onl/tokens/BFZ_012-Gideon-Emblem.jpg", url);
|
||||
}
|
||||
}
|
|
@ -32,7 +32,7 @@ import java.util.List;
|
|||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Modes;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.SpellAbility;
|
||||
import mage.abilities.costs.mana.ManaCosts;
|
||||
import mage.cards.Card;
|
||||
|
@ -311,19 +311,16 @@ public class CardView extends SimpleCardView {
|
|||
this.mageObjectType = MageObjectType.SPELL;
|
||||
Spell spell = (Spell) card;
|
||||
for (SpellAbility spellAbility : spell.getSpellAbilities()) {
|
||||
for (UUID modeId : spellAbility.getModes().getSelectedModes()) {
|
||||
spellAbility.getModes().setActiveMode(modeId);
|
||||
if (spellAbility.getTargets().size() > 0) {
|
||||
for (Mode mode : spellAbility.getModes().getSelectedModes()) {
|
||||
if (mode.getTargets().size() > 0) {
|
||||
setTargets(spellAbility.getTargets());
|
||||
}
|
||||
}
|
||||
}
|
||||
// show for modal spell, which mode was choosen
|
||||
if (spell.getSpellAbility().isModal()) {
|
||||
Modes modes = spell.getSpellAbility().getModes();
|
||||
for (UUID modeId : modes.getSelectedModes()) {
|
||||
modes.setActiveMode(modeId);
|
||||
this.rules.add("<span color='green'><i>Chosen mode: " + spell.getSpellAbility().getEffects().getText(modes.get(modeId)) + "</i></span>");
|
||||
for (Mode mode : spell.getSpellAbility().getModes().getSelectedModes()) {
|
||||
this.rules.add("<span color='green'><i>Chosen mode: " + mode.getEffects().getText(mode) + "</i></span>");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,6 +28,13 @@ public class EmblemView implements CommandObjectView, Serializable {
|
|||
rules = emblem.getAbilities().getRules(sourceCard.getName());
|
||||
}
|
||||
|
||||
public EmblemView(Emblem emblem) {
|
||||
id = emblem.getId();
|
||||
name = emblem.getName();
|
||||
expansionSetCode = emblem.getExpansionSetCodeForImage();
|
||||
rules = emblem.getAbilities().getRules(emblem.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getExpansionSetCode() {
|
||||
return expansionSetCode;
|
||||
|
|
|
@ -123,6 +123,7 @@ public class GameView implements Serializable {
|
|||
checkPaid(stackObject.getId(), (StackAbility) stackObject);
|
||||
} else if (object instanceof Emblem) {
|
||||
Card sourceCard = game.getCard(((Emblem) object).getSourceId());
|
||||
CardView cardView;
|
||||
if (sourceCard != null) {
|
||||
if (!sourceCard.getCardType().contains(CardType.PLANESWALKER)) {
|
||||
if (sourceCard.getSecondCardFace() != null) {
|
||||
|
@ -131,11 +132,12 @@ public class GameView implements Serializable {
|
|||
}
|
||||
((StackAbility) stackObject).setName("Emblem " + sourceCard.getName());
|
||||
((StackAbility) stackObject).setExpansionSetCode(sourceCard.getExpansionSetCode());
|
||||
cardView = new CardView(new EmblemView(((Emblem) object), sourceCard));
|
||||
} else {
|
||||
throw new IllegalArgumentException("Source card for emblem not found.");
|
||||
cardView = new CardView(new EmblemView((Emblem) object));
|
||||
}
|
||||
stack.put(stackObject.getId(),
|
||||
new StackAbilityView(game, (StackAbility) stackObject, object.getName(), new CardView(new EmblemView(((Emblem) object), sourceCard))));
|
||||
new StackAbilityView(game, (StackAbility) stackObject, object.getName(), cardView));
|
||||
checkPaid(stackObject.getId(), ((StackAbility) stackObject));
|
||||
} else {
|
||||
if (object instanceof StackAbility) {
|
||||
|
|
|
@ -132,6 +132,8 @@ public class PlayerView implements Serializable {
|
|||
}
|
||||
}
|
||||
commandList.add(new EmblemView(emblem, sourceCard));
|
||||
} else {
|
||||
commandList.add(new EmblemView(emblem));
|
||||
}
|
||||
}
|
||||
} else if (commandObject instanceof Commander) {
|
||||
|
@ -229,7 +231,7 @@ public class PlayerView implements Serializable {
|
|||
return this.userData;
|
||||
}
|
||||
|
||||
public List<CommandObjectView> getCommadObjectList() {
|
||||
public List<CommandObjectView> getCommandObjectList() {
|
||||
return commandList;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.Modes;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.cards.Card;
|
||||
|
@ -98,13 +99,12 @@ public class StackAbilityView extends CardView {
|
|||
|
||||
private void updateTargets(Game game, StackAbility ability) {
|
||||
List<String> names = new ArrayList<>();
|
||||
for (UUID modeId : ability.getModes().getSelectedModes()) {
|
||||
ability.getModes().setActiveMode(modeId);
|
||||
if (ability.getTargets().size() > 0) {
|
||||
setTargets(ability.getTargets());
|
||||
for (Mode mode : ability.getModes().getSelectedModes()) {
|
||||
if (mode.getTargets().size() > 0) {
|
||||
setTargets(mode.getTargets());
|
||||
} else {
|
||||
List<UUID> targetList = new ArrayList<>();
|
||||
for (Effect effect : ability.getEffects()) {
|
||||
for (Effect effect : mode.getEffects()) {
|
||||
TargetPointer targetPointer = effect.getTargetPointer();
|
||||
if (targetPointer instanceof FixedTarget) {
|
||||
targetList.add(((FixedTarget) targetPointer).getTarget());
|
||||
|
@ -132,9 +132,8 @@ public class StackAbilityView extends CardView {
|
|||
// show for modal ability, which mode was choosen
|
||||
if (ability.isModal()) {
|
||||
Modes modes = ability.getModes();
|
||||
for (UUID modeId : modes.getSelectedModes()) {
|
||||
modes.setActiveMode(modeId);
|
||||
this.rules.add("<span color='green'><i>Chosen mode: " + ability.getEffects().getText(modes.get(modeId)) + "</i></span>");
|
||||
for (Mode mode : modes.getSelectedModes()) {
|
||||
this.rules.add("<span color='green'><i>Chosen mode: " + mode.getEffects().getText(mode) + "</i></span>");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,50 +0,0 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.mage</groupId>
|
||||
<artifactId>mage-plugins</artifactId>
|
||||
<version>1.4.4</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>mage-theme-plugin</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>0.5</version>
|
||||
<name>Mage Theme Plugin</name>
|
||||
<description>Contains resources for drawing background</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>mage-common</artifactId>
|
||||
<version>${mage-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>mage-client</artifactId>
|
||||
<version>1.4.4</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.7</source>
|
||||
<target>1.7</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
||||
<finalName>mage-theme-plugin</finalName>
|
||||
</build>
|
||||
</project>
|
|
@ -1,210 +0,0 @@
|
|||
package org.mage.plugins.theme;
|
||||
|
||||
import mage.components.ImagePanel;
|
||||
import mage.interfaces.plugin.ThemePlugin;
|
||||
import mage.client.dialog.PreferencesDialog;
|
||||
import net.xeoh.plugins.base.annotations.PluginImplementation;
|
||||
import net.xeoh.plugins.base.annotations.events.Init;
|
||||
import net.xeoh.plugins.base.annotations.events.PluginLoaded;
|
||||
import net.xeoh.plugins.base.annotations.meta.Author;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.*;
|
||||
import java.io.InputStream;
|
||||
import java.util.Map;
|
||||
|
||||
@PluginImplementation
|
||||
@Author(name = "nantuko")
|
||||
public class ThemePluginImpl implements ThemePlugin {
|
||||
|
||||
private static final Logger log = Logger.getLogger(ThemePluginImpl.class);
|
||||
private static BufferedImage background;
|
||||
private List flist = new List();
|
||||
private String BackgroundDir = "plugins" + File.separator + "plugin.data" + File.separator
|
||||
+ "background" + File.separator;
|
||||
@Init
|
||||
public void init() {
|
||||
}
|
||||
|
||||
@PluginLoaded
|
||||
public void newPlugin(ThemePlugin plugin) {
|
||||
log.info(plugin.toString() + " has been loaded.");
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "[Theme plugin, version 0.5]";
|
||||
}
|
||||
|
||||
public boolean loadimages(){
|
||||
File filedir = new File(BackgroundDir);
|
||||
File[] filelist = filedir.listFiles();
|
||||
if(filelist == null) return false;
|
||||
if(filelist.length == 0) return false;
|
||||
for(File f:filelist){
|
||||
String filename = f.getName().toLowerCase();
|
||||
if(filename != null && (filename.endsWith(".png") || filename.endsWith(".jpg")
|
||||
|| filename.endsWith(".bmp"))){
|
||||
flist.add(filename);
|
||||
}
|
||||
}
|
||||
if(flist.getItemCount() == 0) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public void applyInGame(Map<String, JComponent> ui) {
|
||||
BufferedImage background;
|
||||
try {
|
||||
|
||||
if(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BATTLEFIELD_IMAGE_DEFAULT,
|
||||
"true").equals("true")){
|
||||
|
||||
background = loadbuffer_default();
|
||||
|
||||
}else if(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BATTLEFIELD_IMAGE_RANDOM,
|
||||
"true").equals("true")){
|
||||
|
||||
background = loadbuffer_random();
|
||||
|
||||
}else if(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BATTLEFIELD_IMAGE, "") != null){
|
||||
|
||||
background = loadbuffer_selected();
|
||||
|
||||
}else{
|
||||
background = loadbuffer_default();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
if(loadimages()){
|
||||
int it = (int)Math.abs(Math.random()*(flist.getItemCount()));
|
||||
filename = BackgroundDir + flist.getItem(it);
|
||||
background = ImageIO.read(new File(filename));
|
||||
}else{
|
||||
filename = "/dragon.png";
|
||||
InputStream is = this.getClass().getResourceAsStream(filename);
|
||||
if (is == null)
|
||||
throw new FileNotFoundException("Couldn't find " + filename + " in resources.");
|
||||
background = ImageIO.read(is);
|
||||
}
|
||||
*/
|
||||
if (background == null) {
|
||||
throw new FileNotFoundException("Couldn't find background file in resources.");
|
||||
}
|
||||
|
||||
if (ui.containsKey("gamePanel") && ui.containsKey("jLayeredPane")) {
|
||||
ImagePanel bgPanel = new ImagePanel(background, ImagePanel.TILED);
|
||||
|
||||
unsetOpaque(ui.get("jSplitPane1"));
|
||||
unsetOpaque(ui.get("pnlBattlefield"));
|
||||
unsetOpaque(ui.get("jPanel3"));
|
||||
unsetOpaque(ui.get("hand"));
|
||||
unsetOpaque(ui.get("gameChatPanel"));
|
||||
unsetOpaque(ui.get("userChatPanel"));
|
||||
|
||||
ui.get("gamePanel").remove(ui.get("jLayeredPane"));
|
||||
bgPanel.add(ui.get("jLayeredPane"));
|
||||
ui.get("gamePanel").add(bgPanel);
|
||||
} else {
|
||||
log.error("error: no components");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private BufferedImage loadbuffer_default() throws IOException{
|
||||
String filename = "/dragon.png";
|
||||
BufferedImage res;
|
||||
InputStream is = this.getClass().getResourceAsStream(filename);
|
||||
res = ImageIO.read(is);
|
||||
return res;
|
||||
}
|
||||
|
||||
private BufferedImage loadbuffer_random() throws IOException{
|
||||
BufferedImage res;
|
||||
if(loadimages()){
|
||||
int it = (int)Math.abs(Math.random()*(flist.getItemCount()));
|
||||
String filename = BackgroundDir + flist.getItem(it);
|
||||
res = ImageIO.read(new File(filename));
|
||||
return res;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private BufferedImage loadbuffer_selected() throws IOException{
|
||||
BufferedImage res;
|
||||
String path = PreferencesDialog.getCachedValue(PreferencesDialog.
|
||||
KEY_BATTLEFIELD_IMAGE, "");
|
||||
if(path != null){
|
||||
res = ImageIO.read(new File(path));
|
||||
return res;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public JComponent updateTable(Map<String, JComponent> ui) {
|
||||
ImagePanel bgPanel = createImagePanelInstance();
|
||||
|
||||
unsetOpaque(ui.get("jScrollPane1"));
|
||||
unsetOpaque(ui.get("jPanel1"));
|
||||
unsetOpaque(ui.get("tablesPanel"));
|
||||
JComponent viewport = ui.get("jScrollPane1ViewPort");
|
||||
if (viewport != null) {
|
||||
viewport.setBackground(new Color(255,255,255,50));
|
||||
}
|
||||
return bgPanel;
|
||||
}
|
||||
|
||||
private ImagePanel createImagePanelInstance() {
|
||||
if (background == null) {
|
||||
synchronized (ThemePluginImpl.class) {
|
||||
if (background == null) {
|
||||
String filename = "/background.png";
|
||||
try {
|
||||
if(PreferencesDialog.getCachedValue(PreferencesDialog.
|
||||
KEY_BACKGROUND_IMAGE_DEFAULT, "true").equals("true")){
|
||||
InputStream is = this.getClass().getResourceAsStream(filename);
|
||||
if (is == null)
|
||||
throw new FileNotFoundException("Couldn't find " + filename + " in resources.");
|
||||
background = ImageIO.read(is);
|
||||
}else if(PreferencesDialog.getCachedValue(PreferencesDialog.
|
||||
KEY_BACKGROUND_IMAGE, "") != null){
|
||||
String path = PreferencesDialog.getCachedValue(PreferencesDialog.
|
||||
KEY_BATTLEFIELD_IMAGE, "");
|
||||
if(path != null){
|
||||
background = ImageIO.read(new File(path));
|
||||
}else{
|
||||
InputStream is = this.getClass().getResourceAsStream(filename);
|
||||
if (is == null)
|
||||
throw new FileNotFoundException("Couldn't find " + filename + " in resources.");
|
||||
background = ImageIO.read(is);
|
||||
}
|
||||
}
|
||||
|
||||
if (background == null)
|
||||
throw new FileNotFoundException("Couldn't find " + filename + " in resources.");
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return new ImagePanel(background, ImagePanel.SCALED);
|
||||
}
|
||||
|
||||
private void unsetOpaque(JComponent c) {
|
||||
if (c != null) {
|
||||
c.setOpaque(false);
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 575 KiB |
Binary file not shown.
Before Width: | Height: | Size: 3.6 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2 MiB |
Binary file not shown.
Before Width: | Height: | Size: 2.1 KiB |
|
@ -16,7 +16,6 @@
|
|||
<description>Mage Plugins POM</description>
|
||||
|
||||
<modules>
|
||||
<module>Mage.Theme.Plugin</module>
|
||||
<module>Mage.Counter.Plugin</module>
|
||||
</modules>
|
||||
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
* Copyright 2011 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.deck;
|
||||
|
||||
import mage.cards.Card;
|
||||
import mage.cards.decks.Deck;
|
||||
import mage.cards.decks.DeckValidator;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author nigelzor
|
||||
*/
|
||||
public class Momir extends DeckValidator {
|
||||
|
||||
public Momir() {
|
||||
this("Momir Basic");
|
||||
}
|
||||
|
||||
public Momir(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean validate(Deck deck) {
|
||||
boolean valid = true;
|
||||
|
||||
if (deck.getCards().size() != 60) {
|
||||
invalid.put("Deck", "Must contain 60 cards: has " + deck.getCards().size() + " cards");
|
||||
valid = false;
|
||||
}
|
||||
|
||||
List<String> basicLandNames = new ArrayList<>(Arrays.asList("Forest", "Island", "Mountain", "Swamp", "Plains"));
|
||||
for (Card card : deck.getCards()) {
|
||||
if (!basicLandNames.contains(card.getName())) {
|
||||
invalid.put(card.getName(), "Only basic lands are allowed");
|
||||
valid = false;
|
||||
}
|
||||
}
|
||||
|
||||
return valid;
|
||||
}
|
||||
|
||||
}
|
50
Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml
Normal file
50
Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml
Normal file
|
@ -0,0 +1,50 @@
|
|||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-4.0.0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.mage</groupId>
|
||||
<artifactId>mage-server-plugins</artifactId>
|
||||
<version>1.4.4</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>mage-game-momirduel</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>Mage Game Momir Basic Two Player</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>mage</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<sourceDirectory>src</sourceDirectory>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.7</source>
|
||||
<target>1.7</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
|
||||
<finalName>mage-game-momirduel</finalName>
|
||||
</build>
|
||||
|
||||
<properties/>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,159 @@
|
|||
/*
|
||||
* 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.game;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.common.DiscardCardCost;
|
||||
import mage.abilities.costs.mana.VariableManaCost;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.InfoEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.repository.CardCriteria;
|
||||
import mage.cards.repository.CardInfo;
|
||||
import mage.cards.repository.CardRepository;
|
||||
import mage.constants.*;
|
||||
import mage.game.command.Emblem;
|
||||
import mage.game.match.MatchType;
|
||||
import mage.game.permanent.token.EmptyToken;
|
||||
import mage.game.turn.TurnMod;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author nigelzor
|
||||
*/
|
||||
public class MomirDuel extends GameImpl {
|
||||
|
||||
public MomirDuel(MultiplayerAttackOption attackOption, RangeOfInfluence range, int freeMulligans, int startLife) {
|
||||
super(attackOption, range, freeMulligans, startLife);
|
||||
}
|
||||
|
||||
public MomirDuel(final MomirDuel game) {
|
||||
super(game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MatchType getGameType() {
|
||||
return new MomirDuelType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNumPlayers() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void init(UUID choosingPlayerId) {
|
||||
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new InfoEffect("Vanguard effects"));
|
||||
for (UUID playerId : state.getPlayerList(startingPlayerId)) {
|
||||
Player player = getPlayer(playerId);
|
||||
if (player != null) {
|
||||
addEmblem(new MomirEmblem(), ability, playerId);
|
||||
}
|
||||
}
|
||||
getState().addAbility(ability, null);
|
||||
super.init(choosingPlayerId);
|
||||
state.getTurnMods().add(new TurnMod(startingPlayerId, PhaseStep.DRAW));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<UUID> getOpponents(UUID playerId) {
|
||||
Set<UUID> opponents = new HashSet<>();
|
||||
for (UUID opponentId: this.getPlayer(playerId).getInRange()) {
|
||||
if (!opponentId.equals(playerId)) {
|
||||
opponents.add(opponentId);
|
||||
}
|
||||
}
|
||||
return opponents;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpponent(Player player, UUID playerToCheck) {
|
||||
return !player.getId().equals(playerToCheck);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MomirDuel copy() {
|
||||
return new MomirDuel(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// faking Vanguard as an Emblem; need to come back to this and add a new type of CommandObject
|
||||
class MomirEmblem extends Emblem {
|
||||
|
||||
public MomirEmblem() {
|
||||
setName("Momir Vig, Simic Visionary");
|
||||
|
||||
// {X}, Discard a card: Put a token into play as a copy of a random creature card with converted mana cost X. Play this ability only any time you could play a sorcery and only once each turn.
|
||||
LimitedTimesPerTurnActivatedAbility ability = new LimitedTimesPerTurnActivatedAbility(Zone.COMMAND, new MomirEffect(), new VariableManaCost());
|
||||
ability.addCost(new DiscardCardCost());
|
||||
ability.setTiming(TimingRule.SORCERY);
|
||||
this.getAbilities().add(ability);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class MomirEffect extends OneShotEffect {
|
||||
|
||||
private static final Random rnd = new Random();
|
||||
|
||||
public MomirEffect() {
|
||||
super(Outcome.PutCreatureInPlay);
|
||||
}
|
||||
|
||||
public MomirEffect(MomirEffect effect) {
|
||||
super(effect);
|
||||
staticText = "Put a token into play as a copy of a random creature card with converted mana cost X";
|
||||
}
|
||||
|
||||
@Override
|
||||
public MomirEffect copy() {
|
||||
return new MomirEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
int value = source.getManaCostsToPay().getX();
|
||||
// should this be random across card names, or card printings?
|
||||
CardCriteria criteria = new CardCriteria().types(CardType.CREATURE).convertedManaCost(value);
|
||||
List<CardInfo> options = CardRepository.instance.findCards(criteria);
|
||||
if (options != null && !options.isEmpty()) {
|
||||
Card card = options.get(rnd.nextInt(options.size())).getCard();
|
||||
EmptyToken token = new EmptyToken();
|
||||
CardUtil.copyTo(token).from(card);
|
||||
token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId(), false, false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* 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.game;
|
||||
|
||||
import mage.game.match.MatchImpl;
|
||||
import mage.game.match.MatchOptions;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author nigelzor
|
||||
*/
|
||||
public class MomirDuelMatch extends MatchImpl {
|
||||
|
||||
public MomirDuelMatch(MatchOptions options) {
|
||||
super(options);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startGame() throws GameException {
|
||||
// Momir Vig, Simic Visionary gives +4 starting life
|
||||
int startLife = 24;
|
||||
|
||||
MomirDuel game = new MomirDuel(options.getAttackOption(), options.getRange(), options.getFreeMulligans(), startLife);
|
||||
game.setStartMessage(this.createGameStartMessage());
|
||||
|
||||
this.initGame(game);
|
||||
games.add(game);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* 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.game;
|
||||
|
||||
import mage.game.match.MatchType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author nigelzor
|
||||
*/
|
||||
public class MomirDuelType extends MatchType {
|
||||
|
||||
public MomirDuelType() {
|
||||
this.name = "Momir Basic Two Player Duel";
|
||||
this.maxPlayers = 2;
|
||||
this.minPlayers = 2;
|
||||
this.numTeams = 0;
|
||||
this.useAttackOption = false;
|
||||
this.useRange = false;
|
||||
this.sideboardingAllowed = true;
|
||||
}
|
||||
|
||||
protected MomirDuelType(final MomirDuelType matchType){
|
||||
super(matchType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MomirDuelType copy() {
|
||||
return new MomirDuelType(this);
|
||||
}
|
||||
|
||||
}
|
|
@ -1568,9 +1568,14 @@ public class ComputerPlayer extends PlayerImpl implements Player {
|
|||
return modes.getMode();
|
||||
}
|
||||
//TODO: improve this;
|
||||
AvailableMode:
|
||||
for (Mode mode : modes.getAvailableModes(source, game)) {
|
||||
if (!modes.getSelectedModes().contains(mode.getId()) // select only modes not already selected
|
||||
&& mode.getTargets().canChoose(source.getSourceId(), source.getControllerId(), game)) { // and where targets are available
|
||||
for (Mode selectedMode : modes.getSelectedModes()) {
|
||||
if (selectedMode.getId().equals(mode.getId())) {
|
||||
continue AvailableMode;
|
||||
}
|
||||
}
|
||||
if (mode.getTargets().canChoose(source.getSourceId(), source.getControllerId(), game)) { // and where targets are available
|
||||
return mode;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,7 +64,16 @@ import mage.constants.ManaType;
|
|||
import mage.constants.Outcome;
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.PlayerAction;
|
||||
import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_ID_NO;
|
||||
import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_ID_YES;
|
||||
import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_RESET_ALL;
|
||||
import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_TEXT_NO;
|
||||
import static mage.constants.PlayerAction.REQUEST_AUTO_ANSWER_TEXT_YES;
|
||||
import static mage.constants.PlayerAction.RESET_AUTO_SELECT_REPLACEMENT_EFFECTS;
|
||||
import static mage.constants.PlayerAction.TRIGGER_AUTO_ORDER_ABILITY_FIRST;
|
||||
import static mage.constants.PlayerAction.TRIGGER_AUTO_ORDER_ABILITY_LAST;
|
||||
import static mage.constants.PlayerAction.TRIGGER_AUTO_ORDER_NAME_FIRST;
|
||||
import static mage.constants.PlayerAction.TRIGGER_AUTO_ORDER_NAME_LAST;
|
||||
import static mage.constants.PlayerAction.TRIGGER_AUTO_ORDER_RESET_ALL;
|
||||
import mage.constants.RangeOfInfluence;
|
||||
import mage.constants.Zone;
|
||||
|
@ -790,6 +799,7 @@ public class HumanPlayer extends PlayerImpl {
|
|||
if (unpaid instanceof ManaCostsImpl) {
|
||||
specialManaAction(unpaid, game);
|
||||
// TODO: delve or convoke cards with PhyrexianManaCost won't work together (this combinaton does not exist yet)
|
||||
@SuppressWarnings("unchecked")
|
||||
ManaCostsImpl<ManaCost> costs = (ManaCostsImpl<ManaCost>) unpaid;
|
||||
for (ManaCost cost : costs.getUnpaid()) {
|
||||
if (cost instanceof PhyrexianManaCost) {
|
||||
|
@ -1284,12 +1294,27 @@ public class HumanPlayer extends PlayerImpl {
|
|||
if (modes.size() > 1) {
|
||||
MageObject obj = game.getObject(source.getSourceId());
|
||||
Map<UUID, String> modeMap = new LinkedHashMap<>();
|
||||
AvailableModes:
|
||||
for (Mode mode : modes.getAvailableModes(source, game)) {
|
||||
if (!modes.getSelectedModes().contains(mode.getId()) // show only modes not already selected
|
||||
&& mode.getTargets().canChoose(source.getSourceId(), source.getControllerId(), game)) { // and where targets are available
|
||||
int timesSelected = 0;
|
||||
for (Mode selectedMode : modes.getSelectedModes()) {
|
||||
if (mode.getId().equals(selectedMode.getId())) {
|
||||
if (modes.isEachModeMoreThanOnce()) {
|
||||
timesSelected++;
|
||||
} else {
|
||||
continue AvailableModes;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mode.getTargets().canChoose(source.getSourceId(), source.getControllerId(), game)) { // and needed targets have to be available
|
||||
String modeText = mode.getEffects().getText(mode);
|
||||
if (obj != null) {
|
||||
modeText = modeText.replace("{source}", obj.getName());
|
||||
modeText = modeText.replace("{source}", obj.getName()).replace("{this}", obj.getName());
|
||||
}
|
||||
if (modes.isEachModeMoreThanOnce()) {
|
||||
if (timesSelected > 0) {
|
||||
modeText = "(selected " + timesSelected + "x) " + modeText;
|
||||
}
|
||||
}
|
||||
modeMap.put(mode.getId(), modeText);
|
||||
}
|
||||
|
@ -1316,6 +1341,7 @@ public class HumanPlayer extends PlayerImpl {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
return modes.getMode();
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,641 @@
|
|||
/*
|
||||
* 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 LegendaryCube extends DraftCube {
|
||||
|
||||
public LegendaryCube() {
|
||||
super("Legendary Cube (598 cards)"); // http://magic.wizards.com/en/MTGO/articles/archive/legendary-cube-cardlist-2015-11-09
|
||||
|
||||
cubeCards.add(new CardIdentity("Aboshan, Cephalid Emperor", ""));
|
||||
cubeCards.add(new CardIdentity("Absorb Vis", ""));
|
||||
cubeCards.add(new CardIdentity("Akroma's Memorial", ""));
|
||||
cubeCards.add(new CardIdentity("Akroma's Vengeance", ""));
|
||||
cubeCards.add(new CardIdentity("Akroma, Angel of Wrath", ""));
|
||||
cubeCards.add(new CardIdentity("Akuta, Born of Ash", ""));
|
||||
cubeCards.add(new CardIdentity("Alesha, Who Smiles at Death", ""));
|
||||
cubeCards.add(new CardIdentity("Alhammarret's Archive", ""));
|
||||
cubeCards.add(new CardIdentity("All Suns' Dawn", ""));
|
||||
cubeCards.add(new CardIdentity("Anafenza, Kin-Tree Spirit", ""));
|
||||
cubeCards.add(new CardIdentity("Anger of the Gods", ""));
|
||||
cubeCards.add(new CardIdentity("Anticipate", ""));
|
||||
cubeCards.add(new CardIdentity("Arashi, the Sky Asunder", ""));
|
||||
cubeCards.add(new CardIdentity("Arcane Denial", ""));
|
||||
cubeCards.add(new CardIdentity("Arcane Sanctum", ""));
|
||||
cubeCards.add(new CardIdentity("Arcanis the Omnipotent", ""));
|
||||
cubeCards.add(new CardIdentity("Arid Mesa", ""));
|
||||
cubeCards.add(new CardIdentity("Armillary Sphere", ""));
|
||||
cubeCards.add(new CardIdentity("Ascendant Evincar", ""));
|
||||
cubeCards.add(new CardIdentity("Ashling the Pilgrim", ""));
|
||||
cubeCards.add(new CardIdentity("Ashling, the Extinguisher", ""));
|
||||
cubeCards.add(new CardIdentity("Atarka, World Render", ""));
|
||||
cubeCards.add(new CardIdentity("Austere Command", ""));
|
||||
cubeCards.add(new CardIdentity("Avacyn, Angel of Hope", ""));
|
||||
cubeCards.add(new CardIdentity("Ayumi, the Last Visitor", ""));
|
||||
cubeCards.add(new CardIdentity("Azami, Lady of Scrolls", ""));
|
||||
cubeCards.add(new CardIdentity("Azorius Chancery", ""));
|
||||
cubeCards.add(new CardIdentity("Azorius Signet", ""));
|
||||
cubeCards.add(new CardIdentity("Azusa, Lost but Seeking", ""));
|
||||
cubeCards.add(new CardIdentity("Bad River", ""));
|
||||
cubeCards.add(new CardIdentity("Badlands", ""));
|
||||
cubeCards.add(new CardIdentity("Banishing Light", ""));
|
||||
cubeCards.add(new CardIdentity("Basalt Monolith", ""));
|
||||
cubeCards.add(new CardIdentity("Basilisk Collar", ""));
|
||||
cubeCards.add(new CardIdentity("Bayou", ""));
|
||||
cubeCards.add(new CardIdentity("Beacon of Destruction", ""));
|
||||
cubeCards.add(new CardIdentity("Beacon of Tomorrows", ""));
|
||||
cubeCards.add(new CardIdentity("Beast Within", ""));
|
||||
cubeCards.add(new CardIdentity("Berserkers' Onslaught", ""));
|
||||
cubeCards.add(new CardIdentity("Black Market", ""));
|
||||
cubeCards.add(new CardIdentity("Black Sun's Zenith", ""));
|
||||
cubeCards.add(new CardIdentity("Blasphemous Act", ""));
|
||||
cubeCards.add(new CardIdentity("Blood Crypt", ""));
|
||||
cubeCards.add(new CardIdentity("Bloodstained Mire", ""));
|
||||
cubeCards.add(new CardIdentity("Bonfire of the Damned", ""));
|
||||
cubeCards.add(new CardIdentity("Boros Garrison", ""));
|
||||
cubeCards.add(new CardIdentity("Boros Signet", ""));
|
||||
cubeCards.add(new CardIdentity("Brago, King Eternal", ""));
|
||||
cubeCards.add(new CardIdentity("Brainbite", ""));
|
||||
cubeCards.add(new CardIdentity("Brainstorm", ""));
|
||||
cubeCards.add(new CardIdentity("Breeding Pool", ""));
|
||||
cubeCards.add(new CardIdentity("Brimaz, King of Oreskos", ""));
|
||||
cubeCards.add(new CardIdentity("Brion Stoutarm", ""));
|
||||
cubeCards.add(new CardIdentity("Brothers Yamazaki", ""));
|
||||
cubeCards.add(new CardIdentity("Brothers Yamazaki", ""));
|
||||
cubeCards.add(new CardIdentity("Caged Sun", ""));
|
||||
cubeCards.add(new CardIdentity("Calciform Pools", ""));
|
||||
cubeCards.add(new CardIdentity("Canopy Vista", ""));
|
||||
cubeCards.add(new CardIdentity("Captain Sisay", ""));
|
||||
cubeCards.add(new CardIdentity("Careful Consideration", ""));
|
||||
cubeCards.add(new CardIdentity("Cascade Bluffs", ""));
|
||||
cubeCards.add(new CardIdentity("Catch // Release", ""));
|
||||
cubeCards.add(new CardIdentity("Cauldron of Souls", ""));
|
||||
cubeCards.add(new CardIdentity("Chain Reaction", ""));
|
||||
cubeCards.add(new CardIdentity("Chainer's Edict", ""));
|
||||
cubeCards.add(new CardIdentity("Champion's Helm", ""));
|
||||
cubeCards.add(new CardIdentity("Chandra, Fire of Kaladesh", ""));
|
||||
cubeCards.add(new CardIdentity("Charcoal Diamond", ""));
|
||||
cubeCards.add(new CardIdentity("Cho-Manno, Revolutionary", ""));
|
||||
cubeCards.add(new CardIdentity("Chromatic Lantern", ""));
|
||||
cubeCards.add(new CardIdentity("Chromatic Sphere", ""));
|
||||
cubeCards.add(new CardIdentity("Chromatic Star", ""));
|
||||
cubeCards.add(new CardIdentity("Cinder Glade", ""));
|
||||
cubeCards.add(new CardIdentity("Clifftop Retreat", ""));
|
||||
cubeCards.add(new CardIdentity("Coalition Relic", ""));
|
||||
cubeCards.add(new CardIdentity("Coalition Victory", ""));
|
||||
cubeCards.add(new CardIdentity("Coldsteel Heart", ""));
|
||||
cubeCards.add(new CardIdentity("Commander Eesha", ""));
|
||||
cubeCards.add(new CardIdentity("Compulsive Research", ""));
|
||||
cubeCards.add(new CardIdentity("Condemn", ""));
|
||||
cubeCards.add(new CardIdentity("Conflux", ""));
|
||||
cubeCards.add(new CardIdentity("Contagion Clasp", ""));
|
||||
cubeCards.add(new CardIdentity("Council's Judgment", ""));
|
||||
cubeCards.add(new CardIdentity("Crackling Doom", ""));
|
||||
cubeCards.add(new CardIdentity("Crib Swap", ""));
|
||||
cubeCards.add(new CardIdentity("Cromat", ""));
|
||||
cubeCards.add(new CardIdentity("Crovax, Ascendant Hero", ""));
|
||||
cubeCards.add(new CardIdentity("Cruel Ultimatum", ""));
|
||||
cubeCards.add(new CardIdentity("Crumbling Necropolis", ""));
|
||||
cubeCards.add(new CardIdentity("Crux of Fate", ""));
|
||||
cubeCards.add(new CardIdentity("Crystal Ball", ""));
|
||||
cubeCards.add(new CardIdentity("Cultivate", ""));
|
||||
cubeCards.add(new CardIdentity("Cyclonic Rift", ""));
|
||||
cubeCards.add(new CardIdentity("Daretti, Scrap Savant", ""));
|
||||
cubeCards.add(new CardIdentity("Dark Depths", ""));
|
||||
cubeCards.add(new CardIdentity("Daxos of Meletis", ""));
|
||||
cubeCards.add(new CardIdentity("Day of Destiny", ""));
|
||||
cubeCards.add(new CardIdentity("Death Denied", ""));
|
||||
cubeCards.add(new CardIdentity("Detention Sphere", ""));
|
||||
cubeCards.add(new CardIdentity("Devour Flesh", ""));
|
||||
cubeCards.add(new CardIdentity("Devour in Shadow", ""));
|
||||
cubeCards.add(new CardIdentity("Diabolic Tutor", ""));
|
||||
cubeCards.add(new CardIdentity("Diaochan, Artful Beauty", ""));
|
||||
cubeCards.add(new CardIdentity("Dimir Aqueduct", ""));
|
||||
cubeCards.add(new CardIdentity("Dimir Signet", ""));
|
||||
cubeCards.add(new CardIdentity("Disenchant", ""));
|
||||
cubeCards.add(new CardIdentity("Dismantling Blow", ""));
|
||||
cubeCards.add(new CardIdentity("Divine Reckoning", ""));
|
||||
cubeCards.add(new CardIdentity("Door to Nothingness", ""));
|
||||
cubeCards.add(new CardIdentity("Doran, the Siege Tower", ""));
|
||||
cubeCards.add(new CardIdentity("Doubling Season", ""));
|
||||
cubeCards.add(new CardIdentity("Dragon Breath", ""));
|
||||
cubeCards.add(new CardIdentity("Dragonlord Atarka", ""));
|
||||
cubeCards.add(new CardIdentity("Dragonlord Dromoka", ""));
|
||||
cubeCards.add(new CardIdentity("Dragonlord Ojutai", ""));
|
||||
cubeCards.add(new CardIdentity("Dragonlord Silumgar", ""));
|
||||
cubeCards.add(new CardIdentity("Dragonskull Summit", ""));
|
||||
cubeCards.add(new CardIdentity("Drana, Kalastria Bloodchief", ""));
|
||||
cubeCards.add(new CardIdentity("Drana, Liberator of Malakir", ""));
|
||||
cubeCards.add(new CardIdentity("Dreadship Reef", ""));
|
||||
cubeCards.add(new CardIdentity("Dromoka's Command", ""));
|
||||
cubeCards.add(new CardIdentity("Drowned Catacomb", ""));
|
||||
cubeCards.add(new CardIdentity("Duress", ""));
|
||||
cubeCards.add(new CardIdentity("Dwynen, Gilt-Leaf Daen", ""));
|
||||
cubeCards.add(new CardIdentity("Edric, Spymaster of Trest", ""));
|
||||
cubeCards.add(new CardIdentity("Eiganjo Castle", ""));
|
||||
cubeCards.add(new CardIdentity("Eight-and-a-Half-Tails", ""));
|
||||
cubeCards.add(new CardIdentity("Eladamri's Call", ""));
|
||||
cubeCards.add(new CardIdentity("Eladamri, Lord of Leaves", ""));
|
||||
cubeCards.add(new CardIdentity("Elbrus, the Binding Blade", ""));
|
||||
cubeCards.add(new CardIdentity("Elesh Norn, Grand Cenobite", ""));
|
||||
cubeCards.add(new CardIdentity("Emrakul, the Aeons Torn", ""));
|
||||
cubeCards.add(new CardIdentity("Endrek Sahr, Master Breeder", ""));
|
||||
cubeCards.add(new CardIdentity("Engineered Explosives", ""));
|
||||
cubeCards.add(new CardIdentity("Enlightened Tutor", ""));
|
||||
cubeCards.add(new CardIdentity("Esper Charm", ""));
|
||||
cubeCards.add(new CardIdentity("Everflowing Chalice", ""));
|
||||
cubeCards.add(new CardIdentity("Evolving Wilds", ""));
|
||||
cubeCards.add(new CardIdentity("Exava, Rakdos Blood Witch", ""));
|
||||
cubeCards.add(new CardIdentity("Experiment Kraj", ""));
|
||||
cubeCards.add(new CardIdentity("Explore", ""));
|
||||
cubeCards.add(new CardIdentity("Explosive Vegetation", ""));
|
||||
cubeCards.add(new CardIdentity("Expunge", ""));
|
||||
cubeCards.add(new CardIdentity("Ezuri, Claw of Progress", ""));
|
||||
cubeCards.add(new CardIdentity("Fact or Fiction", ""));
|
||||
cubeCards.add(new CardIdentity("Faith's Fetters", ""));
|
||||
cubeCards.add(new CardIdentity("Faithless Looting", ""));
|
||||
cubeCards.add(new CardIdentity("Far // Away", ""));
|
||||
cubeCards.add(new CardIdentity("Farseek", ""));
|
||||
cubeCards.add(new CardIdentity("Fellwar Stone", ""));
|
||||
cubeCards.add(new CardIdentity("Fetid Heath", ""));
|
||||
cubeCards.add(new CardIdentity("Fiery Confluence", ""));
|
||||
cubeCards.add(new CardIdentity("Fiery Fall", ""));
|
||||
cubeCards.add(new CardIdentity("Finest Hour", ""));
|
||||
cubeCards.add(new CardIdentity("Fire Diamond", ""));
|
||||
cubeCards.add(new CardIdentity("Fire-Lit Thicket", ""));
|
||||
cubeCards.add(new CardIdentity("Firebolt", ""));
|
||||
cubeCards.add(new CardIdentity("Fires of Yavimaya", ""));
|
||||
cubeCards.add(new CardIdentity("Flood Plain", ""));
|
||||
cubeCards.add(new CardIdentity("Flooded Grove", ""));
|
||||
cubeCards.add(new CardIdentity("Flooded Strand", ""));
|
||||
cubeCards.add(new CardIdentity("Forbidden Alchemy", ""));
|
||||
cubeCards.add(new CardIdentity("Foresee", ""));
|
||||
cubeCards.add(new CardIdentity("Frontier Bivouac", ""));
|
||||
cubeCards.add(new CardIdentity("Fungal Reaches", ""));
|
||||
cubeCards.add(new CardIdentity("Genesis Wave", ""));
|
||||
cubeCards.add(new CardIdentity("Genju of the Realm", ""));
|
||||
cubeCards.add(new CardIdentity("Ghave, Guru of Spores", ""));
|
||||
cubeCards.add(new CardIdentity("Ghoulcaller Gisa", ""));
|
||||
cubeCards.add(new CardIdentity("Gift of the Gargantuan", ""));
|
||||
cubeCards.add(new CardIdentity("Gilded Light", ""));
|
||||
cubeCards.add(new CardIdentity("Gilded Lotus", ""));
|
||||
cubeCards.add(new CardIdentity("Gisela, Blade of Goldnight", ""));
|
||||
cubeCards.add(new CardIdentity("Glacial Fortress", ""));
|
||||
cubeCards.add(new CardIdentity("Gleam of Resistance", ""));
|
||||
cubeCards.add(new CardIdentity("Glissa Sunseeker", ""));
|
||||
cubeCards.add(new CardIdentity("Glissa, the Traitor", ""));
|
||||
cubeCards.add(new CardIdentity("Godless Shrine", ""));
|
||||
cubeCards.add(new CardIdentity("Godo, Bandit Warlord", ""));
|
||||
cubeCards.add(new CardIdentity("Gods Willing", ""));
|
||||
cubeCards.add(new CardIdentity("Golgari Rot Farm", ""));
|
||||
cubeCards.add(new CardIdentity("Golgari Signet", ""));
|
||||
cubeCards.add(new CardIdentity("Grasslands", ""));
|
||||
cubeCards.add(new CardIdentity("Graven Cairns", ""));
|
||||
cubeCards.add(new CardIdentity("Grenzo, Dungeon Warden", ""));
|
||||
cubeCards.add(new CardIdentity("Griselbrand", ""));
|
||||
cubeCards.add(new CardIdentity("Gruul Signet", ""));
|
||||
cubeCards.add(new CardIdentity("Gruul Turf", ""));
|
||||
cubeCards.add(new CardIdentity("Hallowed Fountain", ""));
|
||||
cubeCards.add(new CardIdentity("Hanna, Ship's Navigator", ""));
|
||||
cubeCards.add(new CardIdentity("Harmonize", ""));
|
||||
cubeCards.add(new CardIdentity("Heartless Hidetsugu", ""));
|
||||
cubeCards.add(new CardIdentity("Hedron Archive", ""));
|
||||
cubeCards.add(new CardIdentity("Helvault", ""));
|
||||
cubeCards.add(new CardIdentity("Hero's Blade", ""));
|
||||
cubeCards.add(new CardIdentity("Hero's Demise", ""));
|
||||
cubeCards.add(new CardIdentity("Hero's Downfall", ""));
|
||||
cubeCards.add(new CardIdentity("Heroes' Podium", ""));
|
||||
cubeCards.add(new CardIdentity("Hide // Seek", ""));
|
||||
cubeCards.add(new CardIdentity("Hidetsugu's Second Rite", ""));
|
||||
cubeCards.add(new CardIdentity("Hinterland Harbor", ""));
|
||||
cubeCards.add(new CardIdentity("Homicidal Seclusion", ""));
|
||||
cubeCards.add(new CardIdentity("Honden of Cleansing Fire", ""));
|
||||
cubeCards.add(new CardIdentity("Honden of Infinite Rage", ""));
|
||||
cubeCards.add(new CardIdentity("Honden of Life's Web", ""));
|
||||
cubeCards.add(new CardIdentity("Honden of Night's Reach", ""));
|
||||
cubeCards.add(new CardIdentity("Honden of Seeing Winds", ""));
|
||||
cubeCards.add(new CardIdentity("Honor-Worn Shaku", ""));
|
||||
cubeCards.add(new CardIdentity("Horobi, Death's Wail", ""));
|
||||
cubeCards.add(new CardIdentity("Hua Tuo, Honored Physician", ""));
|
||||
cubeCards.add(new CardIdentity("Hull Breach", ""));
|
||||
cubeCards.add(new CardIdentity("Hythonia the Cruel", ""));
|
||||
cubeCards.add(new CardIdentity("Ichor Wellspring", ""));
|
||||
cubeCards.add(new CardIdentity("Impulse", ""));
|
||||
cubeCards.add(new CardIdentity("Into the Roil", ""));
|
||||
cubeCards.add(new CardIdentity("Isamaru, Hound of Konda", ""));
|
||||
cubeCards.add(new CardIdentity("Isao, Enlightened Bushi", ""));
|
||||
cubeCards.add(new CardIdentity("Isolated Chapel", ""));
|
||||
cubeCards.add(new CardIdentity("Ith, High Arcanist", ""));
|
||||
cubeCards.add(new CardIdentity("Izzet Boilerworks", ""));
|
||||
cubeCards.add(new CardIdentity("Izzet Signet", ""));
|
||||
cubeCards.add(new CardIdentity("Jace, Vryn's Prodigy", ""));
|
||||
cubeCards.add(new CardIdentity("Jareth, Leonine Titan", ""));
|
||||
cubeCards.add(new CardIdentity("Jaya Ballard, Task Mage", ""));
|
||||
cubeCards.add(new CardIdentity("Jazal Goldmane", ""));
|
||||
cubeCards.add(new CardIdentity("Jenara, Asura of War", ""));
|
||||
cubeCards.add(new CardIdentity("Jeska, Warrior Adept", ""));
|
||||
cubeCards.add(new CardIdentity("Jeskai Ascendancy", ""));
|
||||
cubeCards.add(new CardIdentity("Jin-Gitaxias, Core Augur", ""));
|
||||
cubeCards.add(new CardIdentity("Jiwari, the Earth Aflame", ""));
|
||||
cubeCards.add(new CardIdentity("Jor Kadeen, the Prevailer", ""));
|
||||
cubeCards.add(new CardIdentity("Jungle Shrine", ""));
|
||||
cubeCards.add(new CardIdentity("Kaervek the Merciless", ""));
|
||||
cubeCards.add(new CardIdentity("Kagemaro, First to Suffer", ""));
|
||||
cubeCards.add(new CardIdentity("Kaho, Minamo Historian", ""));
|
||||
cubeCards.add(new CardIdentity("Kalemne, Disciple of Iroas", ""));
|
||||
cubeCards.add(new CardIdentity("Kalitas, Bloodchief of Ghet", ""));
|
||||
cubeCards.add(new CardIdentity("Kamahl, Fist of Krosa", ""));
|
||||
cubeCards.add(new CardIdentity("Kamahl, Pit Fighter", ""));
|
||||
cubeCards.add(new CardIdentity("Karador, Ghost Chieftain", ""));
|
||||
cubeCards.add(new CardIdentity("Karlov of the Ghost Council", ""));
|
||||
cubeCards.add(new CardIdentity("Karn, Silver Golem", ""));
|
||||
cubeCards.add(new CardIdentity("Kataki, War's Wage", ""));
|
||||
cubeCards.add(new CardIdentity("Kazuul, Tyrant of the Cliffs", ""));
|
||||
cubeCards.add(new CardIdentity("Keiga, the Tide Star", ""));
|
||||
cubeCards.add(new CardIdentity("Kemba, Kha Regent", ""));
|
||||
cubeCards.add(new CardIdentity("Keranos, God of Storms", ""));
|
||||
cubeCards.add(new CardIdentity("Kira, Great Glass-Spinner", ""));
|
||||
cubeCards.add(new CardIdentity("Kodama of the North Tree", ""));
|
||||
cubeCards.add(new CardIdentity("Kodama's Reach", ""));
|
||||
cubeCards.add(new CardIdentity("Kokusho, the Evening Star", ""));
|
||||
cubeCards.add(new CardIdentity("Kolaghan's Command", ""));
|
||||
cubeCards.add(new CardIdentity("Kolaghan, the Storm's Fury", ""));
|
||||
cubeCards.add(new CardIdentity("Konda's Banner", ""));
|
||||
cubeCards.add(new CardIdentity("Kongming, 'Sleeping Dragon'", ""));
|
||||
cubeCards.add(new CardIdentity("Kozilek, Butcher of Truth", ""));
|
||||
cubeCards.add(new CardIdentity("Krenko, Mob Boss", ""));
|
||||
cubeCards.add(new CardIdentity("Kresh the Bloodbraided", ""));
|
||||
cubeCards.add(new CardIdentity("Krosan Grip", ""));
|
||||
cubeCards.add(new CardIdentity("Krosan Verge", ""));
|
||||
cubeCards.add(new CardIdentity("Kumano, Master Yamabushi", ""));
|
||||
cubeCards.add(new CardIdentity("Kurkesh, Onakke Ancient", ""));
|
||||
cubeCards.add(new CardIdentity("Kytheon, Hero of Akros", ""));
|
||||
cubeCards.add(new CardIdentity("Last Stand", ""));
|
||||
cubeCards.add(new CardIdentity("Lavalanche", ""));
|
||||
cubeCards.add(new CardIdentity("Legacy Weapon", ""));
|
||||
cubeCards.add(new CardIdentity("Life's Legacy", ""));
|
||||
cubeCards.add(new CardIdentity("Lightning Bolt", ""));
|
||||
cubeCards.add(new CardIdentity("Lightning Greaves", ""));
|
||||
cubeCards.add(new CardIdentity("Liliana, Heretical Healer", ""));
|
||||
cubeCards.add(new CardIdentity("Linvala, Keeper of Silence", ""));
|
||||
cubeCards.add(new CardIdentity("Llawan, Cephalid Empress", ""));
|
||||
cubeCards.add(new CardIdentity("Lorthos, the Tidemaker", ""));
|
||||
cubeCards.add(new CardIdentity("Lu Xun, Scholar General", ""));
|
||||
cubeCards.add(new CardIdentity("Lyzolda, the Blood Witch", ""));
|
||||
cubeCards.add(new CardIdentity("Maelstrom Nexus", ""));
|
||||
cubeCards.add(new CardIdentity("Maelstrom Wanderer", ""));
|
||||
cubeCards.add(new CardIdentity("Maga, Traitor to Mortals", ""));
|
||||
cubeCards.add(new CardIdentity("Mage's Guile", ""));
|
||||
cubeCards.add(new CardIdentity("Mageta the Lion", ""));
|
||||
cubeCards.add(new CardIdentity("Mana Reflection", ""));
|
||||
cubeCards.add(new CardIdentity("Marath, Will of the Wild", ""));
|
||||
cubeCards.add(new CardIdentity("Marble Diamond", ""));
|
||||
cubeCards.add(new CardIdentity("March of the Machines", ""));
|
||||
cubeCards.add(new CardIdentity("Marchesa, the Black Rose", ""));
|
||||
cubeCards.add(new CardIdentity("Marsh Flats", ""));
|
||||
cubeCards.add(new CardIdentity("Mayael's Aria", ""));
|
||||
cubeCards.add(new CardIdentity("Melek, Izzet Paragon", ""));
|
||||
cubeCards.add(new CardIdentity("Memnarch", ""));
|
||||
cubeCards.add(new CardIdentity("Meng Huo, Barbarian King", ""));
|
||||
cubeCards.add(new CardIdentity("Meren of Clan Nel Toth", ""));
|
||||
cubeCards.add(new CardIdentity("Mikaeus, the Lunarch", ""));
|
||||
cubeCards.add(new CardIdentity("Mikaeus, the Unhallowed", ""));
|
||||
cubeCards.add(new CardIdentity("Mikokoro, Center of the Sea", ""));
|
||||
cubeCards.add(new CardIdentity("Minamo, School at Water's Edge", ""));
|
||||
cubeCards.add(new CardIdentity("Mind Stone", ""));
|
||||
cubeCards.add(new CardIdentity("Mind's Eye", ""));
|
||||
cubeCards.add(new CardIdentity("Mindslaver", ""));
|
||||
cubeCards.add(new CardIdentity("Mirari", ""));
|
||||
cubeCards.add(new CardIdentity("Mirari's Wake", ""));
|
||||
cubeCards.add(new CardIdentity("Miren, the Moaning Well", ""));
|
||||
cubeCards.add(new CardIdentity("Mirri the Cursed", ""));
|
||||
cubeCards.add(new CardIdentity("Mirri, Cat Warrior", ""));
|
||||
cubeCards.add(new CardIdentity("Misdirection", ""));
|
||||
cubeCards.add(new CardIdentity("Misty Rainforest", ""));
|
||||
cubeCards.add(new CardIdentity("Mizzium Mortars", ""));
|
||||
cubeCards.add(new CardIdentity("Mizzix of the Izmagnus", ""));
|
||||
cubeCards.add(new CardIdentity("Mizzix's Mastery", ""));
|
||||
cubeCards.add(new CardIdentity("Molten Slagheap", ""));
|
||||
cubeCards.add(new CardIdentity("Momentous Fall", ""));
|
||||
cubeCards.add(new CardIdentity("Mortify", ""));
|
||||
cubeCards.add(new CardIdentity("Moss Diamond", ""));
|
||||
cubeCards.add(new CardIdentity("Mountain Valley", ""));
|
||||
cubeCards.add(new CardIdentity("Muddle the Mixture", ""));
|
||||
cubeCards.add(new CardIdentity("Multani, Maro-Sorcerer", ""));
|
||||
cubeCards.add(new CardIdentity("Muzzio, Visionary Architect", ""));
|
||||
cubeCards.add(new CardIdentity("Mycosynth Wellspring", ""));
|
||||
cubeCards.add(new CardIdentity("Myojin of Cleansing Fire", ""));
|
||||
cubeCards.add(new CardIdentity("Myojin of Life's Web", ""));
|
||||
cubeCards.add(new CardIdentity("Myriad Landscape", ""));
|
||||
cubeCards.add(new CardIdentity("Mystic Confluence", ""));
|
||||
cubeCards.add(new CardIdentity("Mystic Gate", ""));
|
||||
cubeCards.add(new CardIdentity("Mystic Monastery", ""));
|
||||
cubeCards.add(new CardIdentity("Nagao, Bound by Honor", ""));
|
||||
cubeCards.add(new CardIdentity("Nath of the Gilt-Leaf", ""));
|
||||
cubeCards.add(new CardIdentity("Naturalize", ""));
|
||||
cubeCards.add(new CardIdentity("Negate", ""));
|
||||
cubeCards.add(new CardIdentity("Night's Whisper", ""));
|
||||
cubeCards.add(new CardIdentity("Nissa's Revelation", ""));
|
||||
cubeCards.add(new CardIdentity("Nissa, Vastwood Seer", ""));
|
||||
cubeCards.add(new CardIdentity("Niv-Mizzet, Dracogenius", ""));
|
||||
cubeCards.add(new CardIdentity("Niv-Mizzet, the Firemind", ""));
|
||||
cubeCards.add(new CardIdentity("Nomad Outpost", ""));
|
||||
cubeCards.add(new CardIdentity("Noyan Dar, Roil Shaper", ""));
|
||||
cubeCards.add(new CardIdentity("Ob Nixilis, the Fallen", ""));
|
||||
cubeCards.add(new CardIdentity("Obelisk of Alara", ""));
|
||||
cubeCards.add(new CardIdentity("Oblation", ""));
|
||||
cubeCards.add(new CardIdentity("Oblivion Ring", ""));
|
||||
cubeCards.add(new CardIdentity("Oblivion Stone", ""));
|
||||
cubeCards.add(new CardIdentity("Obzedat, Ghost Council", ""));
|
||||
cubeCards.add(new CardIdentity("Odric, Master Tactician", ""));
|
||||
cubeCards.add(new CardIdentity("Okina, Temple to the Grandfathers", ""));
|
||||
cubeCards.add(new CardIdentity("Omnath, Locus of Mana", ""));
|
||||
cubeCards.add(new CardIdentity("Omnath, Locus of Rage", ""));
|
||||
cubeCards.add(new CardIdentity("Opal-Eye, Konda's Yojimbo", ""));
|
||||
cubeCards.add(new CardIdentity("Opulent Palace", ""));
|
||||
cubeCards.add(new CardIdentity("Oran-Rief, the Vastwood", ""));
|
||||
cubeCards.add(new CardIdentity("Orim, Samite Healer", ""));
|
||||
cubeCards.add(new CardIdentity("Orzhov Basilica", ""));
|
||||
cubeCards.add(new CardIdentity("Orzhov Signet", ""));
|
||||
cubeCards.add(new CardIdentity("Outpost Siege", ""));
|
||||
cubeCards.add(new CardIdentity("Overgrown Tomb", ""));
|
||||
cubeCards.add(new CardIdentity("Panoptic Mirror", ""));
|
||||
cubeCards.add(new CardIdentity("Pariah", ""));
|
||||
cubeCards.add(new CardIdentity("Path to Exile", ""));
|
||||
cubeCards.add(new CardIdentity("Pernicious Deed", ""));
|
||||
cubeCards.add(new CardIdentity("Phage the Untouchable", ""));
|
||||
cubeCards.add(new CardIdentity("Phyrexian Arena", ""));
|
||||
cubeCards.add(new CardIdentity("Pia and Kiran Nalaar", ""));
|
||||
cubeCards.add(new CardIdentity("Pianna, Nomad Captain", ""));
|
||||
cubeCards.add(new CardIdentity("Pithing Needle", ""));
|
||||
cubeCards.add(new CardIdentity("Plateau", ""));
|
||||
cubeCards.add(new CardIdentity("Polluted Delta", ""));
|
||||
cubeCards.add(new CardIdentity("Polukranos, World Eater", ""));
|
||||
cubeCards.add(new CardIdentity("Praetor's Counsel", ""));
|
||||
cubeCards.add(new CardIdentity("Prairie Stream", ""));
|
||||
cubeCards.add(new CardIdentity("Prime Speaker Zegana", ""));
|
||||
cubeCards.add(new CardIdentity("Primeval Bounty", ""));
|
||||
cubeCards.add(new CardIdentity("Prismatic Lens", ""));
|
||||
cubeCards.add(new CardIdentity("Progenitus", ""));
|
||||
cubeCards.add(new CardIdentity("Prophetic Prism", ""));
|
||||
cubeCards.add(new CardIdentity("Psychotic Fury", ""));
|
||||
cubeCards.add(new CardIdentity("Pure // Simple", ""));
|
||||
cubeCards.add(new CardIdentity("Putrefy", ""));
|
||||
cubeCards.add(new CardIdentity("Pyromancer's Goggles", ""));
|
||||
cubeCards.add(new CardIdentity("Radha, Heir to Keld", ""));
|
||||
cubeCards.add(new CardIdentity("Radiant Purge", ""));
|
||||
cubeCards.add(new CardIdentity("Radiant's Judgment", ""));
|
||||
cubeCards.add(new CardIdentity("Rafiq of the Many", ""));
|
||||
cubeCards.add(new CardIdentity("Rakdos Carnarium", ""));
|
||||
cubeCards.add(new CardIdentity("Rakdos Signet", ""));
|
||||
cubeCards.add(new CardIdentity("Rakka Mar", ""));
|
||||
cubeCards.add(new CardIdentity("Rampant Growth", ""));
|
||||
cubeCards.add(new CardIdentity("Ray of Command", ""));
|
||||
cubeCards.add(new CardIdentity("Read the Bones", ""));
|
||||
cubeCards.add(new CardIdentity("Recoup", ""));
|
||||
cubeCards.add(new CardIdentity("Reflecting Pool", ""));
|
||||
cubeCards.add(new CardIdentity("Regrowth", ""));
|
||||
cubeCards.add(new CardIdentity("Reiterate", ""));
|
||||
cubeCards.add(new CardIdentity("Reki, the History of Kamigawa", ""));
|
||||
cubeCards.add(new CardIdentity("Repeal", ""));
|
||||
cubeCards.add(new CardIdentity("Repulse", ""));
|
||||
cubeCards.add(new CardIdentity("Rescind", ""));
|
||||
cubeCards.add(new CardIdentity("Reya Dawnbringer", ""));
|
||||
cubeCards.add(new CardIdentity("Rhys the Redeemed", ""));
|
||||
cubeCards.add(new CardIdentity("Righteous Confluence", ""));
|
||||
cubeCards.add(new CardIdentity("Rings of Brighthearth", ""));
|
||||
cubeCards.add(new CardIdentity("Rocky Tar Pit", ""));
|
||||
cubeCards.add(new CardIdentity("Rofellos, Llanowar Emissary", ""));
|
||||
cubeCards.add(new CardIdentity("Rootbound Crag", ""));
|
||||
cubeCards.add(new CardIdentity("Rorix Bladewing", ""));
|
||||
cubeCards.add(new CardIdentity("Rugged Prairie", ""));
|
||||
cubeCards.add(new CardIdentity("Rupture Spire", ""));
|
||||
cubeCards.add(new CardIdentity("Ruric Thar, the Unbowed", ""));
|
||||
cubeCards.add(new CardIdentity("Rush of Knowledge", ""));
|
||||
cubeCards.add(new CardIdentity("Ryusei, the Falling Star", ""));
|
||||
cubeCards.add(new CardIdentity("Sachi, Daughter of Seshiro", ""));
|
||||
cubeCards.add(new CardIdentity("Sacred Foundry", ""));
|
||||
cubeCards.add(new CardIdentity("Saffi Eriksdotter", ""));
|
||||
cubeCards.add(new CardIdentity("Sakashima the Impostor", ""));
|
||||
cubeCards.add(new CardIdentity("Saltcrusted Steppe", ""));
|
||||
cubeCards.add(new CardIdentity("Sandsteppe Citadel", ""));
|
||||
cubeCards.add(new CardIdentity("Savage Lands", ""));
|
||||
cubeCards.add(new CardIdentity("Savannah", ""));
|
||||
cubeCards.add(new CardIdentity("Scalding Tarn", ""));
|
||||
cubeCards.add(new CardIdentity("Scion of the Ur-Dragon", ""));
|
||||
cubeCards.add(new CardIdentity("Scrap", ""));
|
||||
cubeCards.add(new CardIdentity("Scrubland", ""));
|
||||
cubeCards.add(new CardIdentity("Sculpting Steel", ""));
|
||||
cubeCards.add(new CardIdentity("Search for Tomorrow", ""));
|
||||
cubeCards.add(new CardIdentity("Seaside Citadel", ""));
|
||||
cubeCards.add(new CardIdentity("Seizan, Perverter of Truth", ""));
|
||||
cubeCards.add(new CardIdentity("Selesnya Sanctuary", ""));
|
||||
cubeCards.add(new CardIdentity("Selesnya Signet", ""));
|
||||
cubeCards.add(new CardIdentity("Sensei Golden-Tail", ""));
|
||||
cubeCards.add(new CardIdentity("Sharuum the Hegemon", ""));
|
||||
cubeCards.add(new CardIdentity("Shattergang Brothers", ""));
|
||||
cubeCards.add(new CardIdentity("Sheoldred, Whispering One", ""));
|
||||
cubeCards.add(new CardIdentity("Shinka, the Bloodsoaked Keep", ""));
|
||||
cubeCards.add(new CardIdentity("Shizo, Death's Storehouse", ""));
|
||||
cubeCards.add(new CardIdentity("Shu Yun, the Silent Tempest", ""));
|
||||
cubeCards.add(new CardIdentity("Sidar Jabari", ""));
|
||||
cubeCards.add(new CardIdentity("Sidisi, Brood Tyrant", ""));
|
||||
cubeCards.add(new CardIdentity("Sidisi, Undead Vizier", ""));
|
||||
cubeCards.add(new CardIdentity("Sigarda, Host of Herons", ""));
|
||||
cubeCards.add(new CardIdentity("Sign in Blood", ""));
|
||||
cubeCards.add(new CardIdentity("Silence the Believers", ""));
|
||||
cubeCards.add(new CardIdentity("Silumgar's Command", ""));
|
||||
cubeCards.add(new CardIdentity("Silumgar, the Drifting Death", ""));
|
||||
cubeCards.add(new CardIdentity("Silvos, Rogue Elemental", ""));
|
||||
cubeCards.add(new CardIdentity("Simic Growth Chamber", ""));
|
||||
cubeCards.add(new CardIdentity("Simic Signet", ""));
|
||||
cubeCards.add(new CardIdentity("Skullbriar, the Walking Grave", ""));
|
||||
cubeCards.add(new CardIdentity("Sky Diamond", ""));
|
||||
cubeCards.add(new CardIdentity("Skyship Weatherlight", ""));
|
||||
cubeCards.add(new CardIdentity("Smoldering Marsh", ""));
|
||||
cubeCards.add(new CardIdentity("Song of the Dryads", ""));
|
||||
cubeCards.add(new CardIdentity("Sorin's Vengeance", ""));
|
||||
cubeCards.add(new CardIdentity("Soul's Fire", ""));
|
||||
cubeCards.add(new CardIdentity("Sphere of the Suns", ""));
|
||||
cubeCards.add(new CardIdentity("Sphinx-Bone Wand", ""));
|
||||
cubeCards.add(new CardIdentity("Spine of Ish Sah", ""));
|
||||
cubeCards.add(new CardIdentity("Spirit of the Night", ""));
|
||||
cubeCards.add(new CardIdentity("Spite // Malice", ""));
|
||||
cubeCards.add(new CardIdentity("Squee, Goblin Nabob", ""));
|
||||
cubeCards.add(new CardIdentity("Staff of Nin", ""));
|
||||
cubeCards.add(new CardIdentity("Steam Vents", ""));
|
||||
cubeCards.add(new CardIdentity("Stitcher Geralf", ""));
|
||||
cubeCards.add(new CardIdentity("Stomping Ground", ""));
|
||||
cubeCards.add(new CardIdentity("Stubborn Denial", ""));
|
||||
cubeCards.add(new CardIdentity("Sulfur Falls", ""));
|
||||
cubeCards.add(new CardIdentity("Sultai Charm", ""));
|
||||
cubeCards.add(new CardIdentity("Sun Ce, Young Conquerer", ""));
|
||||
cubeCards.add(new CardIdentity("Sun Quan, Lord of Wu", ""));
|
||||
cubeCards.add(new CardIdentity("Sunken Hollow", ""));
|
||||
cubeCards.add(new CardIdentity("Sunken Ruins", ""));
|
||||
cubeCards.add(new CardIdentity("Sunpetal Grove", ""));
|
||||
cubeCards.add(new CardIdentity("Surrak Dragonclaw", ""));
|
||||
cubeCards.add(new CardIdentity("Surrak, the Hunt Caller", ""));
|
||||
cubeCards.add(new CardIdentity("Swiftfoot Boots", ""));
|
||||
cubeCards.add(new CardIdentity("Sword of the Animist", ""));
|
||||
cubeCards.add(new CardIdentity("Sword of the Chosen", ""));
|
||||
cubeCards.add(new CardIdentity("Sydri, Galvanic Genius", ""));
|
||||
cubeCards.add(new CardIdentity("Sygg, River Cutthroat", ""));
|
||||
cubeCards.add(new CardIdentity("Sygg, River Guide", ""));
|
||||
cubeCards.add(new CardIdentity("Sylvan Bounty", ""));
|
||||
cubeCards.add(new CardIdentity("Tahngarth, Talruum Hero", ""));
|
||||
cubeCards.add(new CardIdentity("Taiga", ""));
|
||||
cubeCards.add(new CardIdentity("Tainted Pact", ""));
|
||||
cubeCards.add(new CardIdentity("Tajic, Blade of the Legion", ""));
|
||||
cubeCards.add(new CardIdentity("Talisman of Dominance", ""));
|
||||
cubeCards.add(new CardIdentity("Talisman of Impulse", ""));
|
||||
cubeCards.add(new CardIdentity("Talisman of Indulgence", ""));
|
||||
cubeCards.add(new CardIdentity("Talisman of Progress", ""));
|
||||
cubeCards.add(new CardIdentity("Talisman of Unity", ""));
|
||||
cubeCards.add(new CardIdentity("Talrand, Sky Summoner", ""));
|
||||
cubeCards.add(new CardIdentity("Tasigur, the Golden Fang", ""));
|
||||
cubeCards.add(new CardIdentity("Tatsumasa, the Dragon's Fang", ""));
|
||||
cubeCards.add(new CardIdentity("Teferi, Mage of Zhalfir", ""));
|
||||
cubeCards.add(new CardIdentity("Temple Garden", ""));
|
||||
cubeCards.add(new CardIdentity("Temple of Abandon", ""));
|
||||
cubeCards.add(new CardIdentity("Temple of Deceit", ""));
|
||||
cubeCards.add(new CardIdentity("Temple of Enlightenment", ""));
|
||||
cubeCards.add(new CardIdentity("Temple of Epiphany", ""));
|
||||
cubeCards.add(new CardIdentity("Temple of Malady", ""));
|
||||
cubeCards.add(new CardIdentity("Temple of Malice", ""));
|
||||
cubeCards.add(new CardIdentity("Temple of Mystery", ""));
|
||||
cubeCards.add(new CardIdentity("Temple of Plenty", ""));
|
||||
cubeCards.add(new CardIdentity("Temple of Silence", ""));
|
||||
cubeCards.add(new CardIdentity("Temple of the False God", ""));
|
||||
cubeCards.add(new CardIdentity("Temple of Triumph", ""));
|
||||
cubeCards.add(new CardIdentity("Temur Ascendancy", ""));
|
||||
cubeCards.add(new CardIdentity("Temur Battle Rage", ""));
|
||||
cubeCards.add(new CardIdentity("Tenza, Godo's Maul", ""));
|
||||
cubeCards.add(new CardIdentity("Terminate", ""));
|
||||
cubeCards.add(new CardIdentity("Terramorphic Expanse", ""));
|
||||
cubeCards.add(new CardIdentity("Terrarion", ""));
|
||||
cubeCards.add(new CardIdentity("Teysa, Envoy of Ghosts", ""));
|
||||
cubeCards.add(new CardIdentity("Tezzeret the Seeker", ""));
|
||||
cubeCards.add(new CardIdentity("Thada Adel, Acquisitor", ""));
|
||||
cubeCards.add(new CardIdentity("That Which Was Taken", ""));
|
||||
cubeCards.add(new CardIdentity("The Mimeoplasm", ""));
|
||||
cubeCards.add(new CardIdentity("Thirst for Knowledge", ""));
|
||||
cubeCards.add(new CardIdentity("Thran Dynamo", ""));
|
||||
cubeCards.add(new CardIdentity("Thraximundar", ""));
|
||||
cubeCards.add(new CardIdentity("Thrun, the Last Troll", ""));
|
||||
cubeCards.add(new CardIdentity("Time of Need", ""));
|
||||
cubeCards.add(new CardIdentity("Time Stop", ""));
|
||||
cubeCards.add(new CardIdentity("Time Warp", ""));
|
||||
cubeCards.add(new CardIdentity("Titania, Protector of Argoth", ""));
|
||||
cubeCards.add(new CardIdentity("Tithe", ""));
|
||||
cubeCards.add(new CardIdentity("Tolsimir Wolfblood", ""));
|
||||
cubeCards.add(new CardIdentity("Tomorrow, Azami's Familiar", ""));
|
||||
cubeCards.add(new CardIdentity("Tormenting Voice", ""));
|
||||
cubeCards.add(new CardIdentity("Toshiro Umezawa", ""));
|
||||
cubeCards.add(new CardIdentity("Toxic Deluge", ""));
|
||||
cubeCards.add(new CardIdentity("Trading Post", ""));
|
||||
cubeCards.add(new CardIdentity("Tragic Slip", ""));
|
||||
cubeCards.add(new CardIdentity("Transguild Promenade", ""));
|
||||
cubeCards.add(new CardIdentity("Traumatic Visions", ""));
|
||||
cubeCards.add(new CardIdentity("Tribute to Hunger", ""));
|
||||
cubeCards.add(new CardIdentity("Tromokratis", ""));
|
||||
cubeCards.add(new CardIdentity("Tropical Island", ""));
|
||||
cubeCards.add(new CardIdentity("Tsabo Tavoc", ""));
|
||||
cubeCards.add(new CardIdentity("Tuktuk the Explorer", ""));
|
||||
cubeCards.add(new CardIdentity("Tumble Magnet", ""));
|
||||
cubeCards.add(new CardIdentity("Tundra", ""));
|
||||
cubeCards.add(new CardIdentity("Turn // Burn", ""));
|
||||
cubeCards.add(new CardIdentity("Twilight Mire", ""));
|
||||
cubeCards.add(new CardIdentity("Tymaret, the Murder King", ""));
|
||||
cubeCards.add(new CardIdentity("Ugin's Insight", ""));
|
||||
cubeCards.add(new CardIdentity("Ulamog, the Infinite Gyre", ""));
|
||||
cubeCards.add(new CardIdentity("Ultimate Price", ""));
|
||||
cubeCards.add(new CardIdentity("Underground Sea", ""));
|
||||
cubeCards.add(new CardIdentity("Unexpectedly Absent", ""));
|
||||
cubeCards.add(new CardIdentity("Unstable Obelisk", ""));
|
||||
cubeCards.add(new CardIdentity("Untaidake, the Cloud Keeper", ""));
|
||||
cubeCards.add(new CardIdentity("Urabrask the Hidden", ""));
|
||||
cubeCards.add(new CardIdentity("Urban Evolution", ""));
|
||||
cubeCards.add(new CardIdentity("Urza's Rage", ""));
|
||||
cubeCards.add(new CardIdentity("Utter End", ""));
|
||||
cubeCards.add(new CardIdentity("Uyo, Silent Prophet", ""));
|
||||
cubeCards.add(new CardIdentity("Valorous Stance", ""));
|
||||
cubeCards.add(new CardIdentity("Vampiric Tutor", ""));
|
||||
cubeCards.add(new CardIdentity("Vanish into Memory", ""));
|
||||
cubeCards.add(new CardIdentity("Vedalken Orrery", ""));
|
||||
cubeCards.add(new CardIdentity("Vendetta", ""));
|
||||
cubeCards.add(new CardIdentity("Vendilion Clique", ""));
|
||||
cubeCards.add(new CardIdentity("Venser, Shaper Savant", ""));
|
||||
cubeCards.add(new CardIdentity("Verdant Catacombs", ""));
|
||||
cubeCards.add(new CardIdentity("Verdant Confluence", ""));
|
||||
cubeCards.add(new CardIdentity("Verdeloth the Ancient", ""));
|
||||
cubeCards.add(new CardIdentity("Vicious Shadows", ""));
|
||||
cubeCards.add(new CardIdentity("Visara the Dreadful", ""));
|
||||
cubeCards.add(new CardIdentity("Vish Kal, Blood Arbiter", ""));
|
||||
cubeCards.add(new CardIdentity("Volcanic Island", ""));
|
||||
cubeCards.add(new CardIdentity("Vorel of the Hull Clade", ""));
|
||||
cubeCards.add(new CardIdentity("Vorinclex, Voice of Hunger", ""));
|
||||
cubeCards.add(new CardIdentity("Warstorm Surge", ""));
|
||||
cubeCards.add(new CardIdentity("Watery Grave", ""));
|
||||
cubeCards.add(new CardIdentity("Wayfarer's Bauble", ""));
|
||||
cubeCards.add(new CardIdentity("Wear // Tear", ""));
|
||||
cubeCards.add(new CardIdentity("Whispers of the Muse", ""));
|
||||
cubeCards.add(new CardIdentity("Wild Ricochet", ""));
|
||||
cubeCards.add(new CardIdentity("Windswept Heath", ""));
|
||||
cubeCards.add(new CardIdentity("Wooded Bastion", ""));
|
||||
cubeCards.add(new CardIdentity("Wooded Foothills", ""));
|
||||
cubeCards.add(new CardIdentity("Woodland Cemetery", ""));
|
||||
cubeCards.add(new CardIdentity("Word of Seizing", ""));
|
||||
cubeCards.add(new CardIdentity("Worldly Tutor", ""));
|
||||
cubeCards.add(new CardIdentity("Worn Powerstone", ""));
|
||||
cubeCards.add(new CardIdentity("Wort, the Raidmother", ""));
|
||||
cubeCards.add(new CardIdentity("Wrath of God", ""));
|
||||
cubeCards.add(new CardIdentity("Wretched Confluence", ""));
|
||||
cubeCards.add(new CardIdentity("Wrexial, the Risen Deep", ""));
|
||||
cubeCards.add(new CardIdentity("Wydwen, the Biting Gale", ""));
|
||||
cubeCards.add(new CardIdentity("Xenagos, God of Revels", ""));
|
||||
cubeCards.add(new CardIdentity("Xiahou Dun, the One-Eyed", ""));
|
||||
cubeCards.add(new CardIdentity("Yasova Dragonclaw", ""));
|
||||
cubeCards.add(new CardIdentity("Yawgmoth's Agenda", ""));
|
||||
cubeCards.add(new CardIdentity("Yeva, Nature's Herald", ""));
|
||||
cubeCards.add(new CardIdentity("Yisan, the Wanderer Bard", ""));
|
||||
cubeCards.add(new CardIdentity("Yomiji, Who Bars the Way", ""));
|
||||
cubeCards.add(new CardIdentity("Yosei, the Morning Star", ""));
|
||||
cubeCards.add(new CardIdentity("Zedruu the Greathearted", ""));
|
||||
cubeCards.add(new CardIdentity("Zirilan of the Claw", ""));
|
||||
cubeCards.add(new CardIdentity("Zurgo Bellstriker", ""));
|
||||
cubeCards.add(new CardIdentity("Zurgo Helmsmasher", ""));
|
||||
}
|
||||
}
|
|
@ -17,9 +17,10 @@
|
|||
<modules>
|
||||
<module>Mage.Deck.Constructed</module>
|
||||
<module>Mage.Deck.Limited</module>
|
||||
<module>Mage.Game.CommanderDuel</module>
|
||||
<module>Mage.Game.CommanderDuel</module>
|
||||
<module>Mage.Game.CommanderFreeForAll</module>
|
||||
<module>Mage.Game.FreeForAll</module>
|
||||
<module>Mage.Game.MomirDuel</module>
|
||||
<module>Mage.Game.TinyLeadersDuel</module>
|
||||
<module>Mage.Game.TwoPlayerDuel</module>
|
||||
<module>Mage.Player.AI</module>
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
<gameType name="Commander Two Player Duel" jar="mage-game-commanderduel.jar" className="mage.game.CommanderDuelMatch" typeName="mage.game.CommanderDuelType"/>
|
||||
<gameType name="Commander Free For All" jar="mage-game-commanderfreeforall.jar" className="mage.game.CommanderFreeForAllMatch" typeName="mage.game.CommanderFreeForAllType"/>
|
||||
<gameType name="Tiny Leaders Two Player Duel" jar="mage-game-tinyleadersduel.jar" className="mage.game.TinyLeadersDuelMatch" typeName="mage.game.TinyLeadersDuelType"/>
|
||||
<gameType name="Momir Basic Two Player Duel" jar="mage-game-momirduel.jar" className="mage.game.MomirDuelMatch" typeName="mage.game.MomirDuelType"/>
|
||||
</gameTypes>
|
||||
<tournamentTypes>
|
||||
<tournamentType name="Constructed Elimination" jar="mage-tournament-constructed.jar" className="mage.tournament.ConstructedEliminationTournament" typeName="mage.tournament.ConstructedEliminationTournamentType"/>
|
||||
|
@ -78,6 +79,7 @@
|
|||
<draftCube name="MTGO Legacy Cube (600 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGOLegacyCube"/>
|
||||
<draftCube name="MTGO Legacy Cube March 2015 (600 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGOLegacyCubeMarch2015"/>
|
||||
<draftCube name="MTGO Legacy Cube September 2015 (600 cards)" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.MTGOLegacyCubeSeptember2015"/>
|
||||
<draftCube name="MTGO Legendary Cube" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.LegendaryCube"/>
|
||||
<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"/>
|
||||
</draftCubes>
|
||||
|
@ -93,6 +95,7 @@
|
|||
<deckType name="Variant Magic - Commander" jar="mage-deck-constructed.jar" className="mage.deck.Commander"/>
|
||||
<deckType name="Variant Magic - Duel Commander" jar="mage-deck-constructed.jar" className="mage.deck.DuelCommander"/>
|
||||
<deckType name="Variant Magic - Tiny Leaders" jar="mage-deck-constructed.jar" className="mage.deck.TinyLeaders"/>
|
||||
<deckType name="Variant Magic - Momir Basic" jar="mage-deck-constructed.jar" className="mage.deck.Momir"/>
|
||||
<deckType name="Block Constructed - Battle for Zendikar" jar="mage-deck-constructed.jar" className="mage.deck.BattleForZendikarBlock"/>
|
||||
<deckType name="Block Constructed - Innistrad" jar="mage-deck-constructed.jar" className="mage.deck.InnistradBlock"/>
|
||||
<deckType name="Block Constructed - Kamigawa" jar="mage-deck-constructed.jar" className="mage.deck.KamigawaBlock"/>
|
||||
|
|
|
@ -142,6 +142,12 @@
|
|||
<version>${project.version}</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>mage-game-momirduel</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
<gameType name="Commander Two Player Duel" jar="mage-game-commanderduel-${project.version}.jar" className="mage.game.CommanderDuelMatch" typeName="mage.game.CommanderDuelType"/>
|
||||
<gameType name="Commander Free For All" jar="mage-game-commanderfreeforall-${project.version}.jar" className="mage.game.CommanderFreeForAllMatch" typeName="mage.game.CommanderFreeForAllType"/>
|
||||
<gameType name="Tiny Leaders Two Player Duel" jar="mage-game-tinyleadersduel-${project.version}.jar" className="mage.game.TinyLeadersDuelMatch" typeName="mage.game.TinyLeadersDuelType"/>
|
||||
<gameType name="Momir Basic Two Player Duel" jar="mage-game-momirduel-${project.version}.jar" className="mage.game.MomirDuelMatch" typeName="mage.game.MomirDuelType"/>
|
||||
</gameTypes>
|
||||
<tournamentTypes>
|
||||
<tournamentType name="Constructed Elimination" jar="mage-tournament-constructed-${project.version}.jar" className="mage.tournament.ConstructedEliminationTournament" typeName="mage.tournament.ConstructedEliminationTournamentType"/>
|
||||
|
@ -57,6 +58,7 @@
|
|||
<draftCube name="MTGO Legacy Cube (600 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGOLegacyCube"/>
|
||||
<draftCube name="MTGO Legacy Cube March 2015 (600 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGOLegacyCubeMarch2015"/>
|
||||
<draftCube name="MTGO Legacy Cube September 2015 (600 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGOLegacyCubeSeptember2015"/>
|
||||
<draftCube name="MTGO Legendary Cube" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.LegendaryCube"/>
|
||||
<draftCube name="The Peasant's Toolbox (800 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.PeasantsToolboxCube"/>
|
||||
<draftCube name="www.MTGCube.com (502 cards)" jar="mage-tournament-booster-draft-${project.version}.jar" className="mage.tournament.cubes.MTGCube"/>
|
||||
</draftCubes>
|
||||
|
@ -72,6 +74,7 @@
|
|||
<deckType name="Variant Magic - Commander" jar="mage-deck-constructed-${project.version}.jar" className="mage.deck.Commander"/>
|
||||
<deckType name="Variant Magic - Duel Commander" jar="mage-deck-constructed-${project.version}.jar" className="mage.deck.DuelCommander"/>
|
||||
<deckType name="Variant Magic - Tiny Leaders" jar="mage-deck-constructed-${project.version}.jar" className="mage.deck.TinyLeaders"/>
|
||||
<deckType name="Variant Magic - Momir Basic" jar="mage-deck-constructed-${project.version}.jar" className="mage.deck.Momir"/>
|
||||
<deckType name="Block Constructed - Battle for Zendikar" jar="mage-deck-constructed.jar" className="mage.deck.BattleForZendikarBlock"/>
|
||||
<deckType name="Block Constructed - Innistrad" jar="mage-deck-constructed-${project.version}.jar" className="mage.deck.InnistradBlock"/>
|
||||
<deckType name="Block Constructed - Kamigawa" jar="mage-deck-constructed-${project.version}.jar" className="mage.deck.KamigawaBlock"/>
|
||||
|
|
|
@ -166,12 +166,9 @@ public class Main {
|
|||
else {
|
||||
logger.fatal("Unable to start MAGE server - another server is already started");
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
logger.fatal("Failed to start server - " + connection.toString(), ex);
|
||||
} catch (Exception ex) {
|
||||
logger.fatal("Failed to start server - " + connection.toString(), ex);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void initStatistics() {
|
||||
|
|
52
Mage.Sets/src/mage/sets/alliances/WildAesthir1.java
Normal file
52
Mage.Sets/src/mage/sets/alliances/WildAesthir1.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.alliances;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author nigelzor
|
||||
*/
|
||||
public class WildAesthir1 extends mage.sets.masterseditioniv.WildAesthir {
|
||||
|
||||
public WildAesthir1(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 154;
|
||||
this.expansionSetCode = "ALL";
|
||||
}
|
||||
|
||||
public WildAesthir1(final WildAesthir1 card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WildAesthir1 copy() {
|
||||
return new WildAesthir1(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/alliances/WildAesthir2.java
Normal file
52
Mage.Sets/src/mage/sets/alliances/WildAesthir2.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.alliances;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author nigelzor
|
||||
*/
|
||||
public class WildAesthir2 extends mage.sets.masterseditioniv.WildAesthir {
|
||||
|
||||
public WildAesthir2(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 155;
|
||||
this.expansionSetCode = "ALL";
|
||||
}
|
||||
|
||||
public WildAesthir2(final WildAesthir2 card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WildAesthir2 copy() {
|
||||
return new WildAesthir2(this);
|
||||
}
|
||||
}
|
54
Mage.Sets/src/mage/sets/antiquities/CoralHelm.java
Normal file
54
Mage.Sets/src/mage/sets/antiquities/CoralHelm.java
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* 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.antiquities;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.constants.Rarity;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author nigelzor
|
||||
*/
|
||||
public class CoralHelm extends mage.sets.masterseditioniv.CoralHelm {
|
||||
|
||||
public CoralHelm(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 12;
|
||||
this.expansionSetCode = "ATQ";
|
||||
this.rarity = Rarity.RARE;
|
||||
}
|
||||
|
||||
public CoralHelm(final CoralHelm card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CoralHelm copy() {
|
||||
return new CoralHelm(this);
|
||||
}
|
||||
}
|
|
@ -31,25 +31,26 @@ package mage.sets.apocalypse;
|
|||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.SpellCastAllTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.FilterSpell;
|
||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.game.stack.Spell;
|
||||
|
||||
/**
|
||||
* @author Loki
|
||||
*/
|
||||
public class BogGnarr extends CardImpl {
|
||||
|
||||
private static final FilterSpell filter = new FilterSpell("a black spell");
|
||||
|
||||
static {
|
||||
filter.add(new ColorPredicate(ObjectColor.BLACK));
|
||||
}
|
||||
|
||||
public BogGnarr(UUID ownerId) {
|
||||
super(ownerId, 76, "Bog Gnarr", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{4}{G}");
|
||||
this.expansionSetCode = "APC";
|
||||
|
@ -57,7 +58,9 @@ public class BogGnarr extends CardImpl {
|
|||
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
this.addAbility(new BogGnarrTriggeredAbility());
|
||||
|
||||
// Whenever a player casts a black spell, Bog Gnarr gets +2/+2 until end of turn.
|
||||
this.addAbility(new SpellCastAllTriggeredAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn), filter, false));
|
||||
}
|
||||
|
||||
public BogGnarr(final BogGnarr card) {
|
||||
|
@ -68,43 +71,4 @@ public class BogGnarr extends CardImpl {
|
|||
public BogGnarr copy() {
|
||||
return new BogGnarr(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class BogGnarrTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private static final FilterCard filter = new FilterCard("a black spell");
|
||||
|
||||
static {
|
||||
filter.add(new ColorPredicate(ObjectColor.BLACK));
|
||||
}
|
||||
|
||||
public BogGnarrTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new BoostSourceEffect(2, 2, Duration.EndOfTurn), false);
|
||||
}
|
||||
|
||||
public BogGnarrTriggeredAbility(final BogGnarrTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == EventType.SPELL_CAST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Spell spell = game.getStack().getSpell(event.getTargetId());
|
||||
return spell != null && filter.match(spell, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a player casts " + filter.getMessage() + ", " + super.getRule();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BogGnarrTriggeredAbility copy() {
|
||||
return new BogGnarrTriggeredAbility(this);
|
||||
}
|
||||
}
|
|
@ -29,26 +29,31 @@ package mage.sets.apocalypse;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.KickedCondition;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.effects.common.DestroyAllEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.KickerAbility;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.common.FilterLandPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.filter.predicate.permanent.ControllerPredicate;
|
||||
|
||||
/**
|
||||
* @author Loki
|
||||
*/
|
||||
public class DesolationAngel extends CardImpl {
|
||||
|
||||
private static final FilterLandPermanent filter = new FilterLandPermanent("lands");
|
||||
private static final FilterLandPermanent filter2 = new FilterLandPermanent("lands you control");
|
||||
|
||||
static {
|
||||
filter2.add(new ControllerPredicate(TargetController.YOU));
|
||||
}
|
||||
|
||||
public DesolationAngel(UUID ownerId) {
|
||||
super(ownerId, 38, "Desolation Angel", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{B}{B}");
|
||||
this.expansionSetCode = "APC";
|
||||
|
@ -64,7 +69,8 @@ public class DesolationAngel extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// When Desolation Angel enters the battlefield, destroy all lands you control. If it was kicked, destroy all lands instead.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new DesolationAngelEntersBattlefieldEffect()));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new ConditionalOneShotEffect(new DestroyAllEffect(filter),
|
||||
new DestroyAllEffect(filter2), KickedCondition.getInstance(), "destroy all lands you control. If it was kicked, destroy all lands instead.")));
|
||||
}
|
||||
|
||||
public DesolationAngel(final DesolationAngel card) {
|
||||
|
@ -76,34 +82,3 @@ public class DesolationAngel extends CardImpl {
|
|||
return new DesolationAngel(this);
|
||||
}
|
||||
}
|
||||
|
||||
class DesolationAngelEntersBattlefieldEffect extends OneShotEffect {
|
||||
|
||||
DesolationAngelEntersBattlefieldEffect() {
|
||||
super(Outcome.DestroyPermanent);
|
||||
staticText = "destroy all lands you control. If it was kicked, destroy all lands instead";
|
||||
}
|
||||
|
||||
DesolationAngelEntersBattlefieldEffect(final DesolationAngelEntersBattlefieldEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Card p = game.getCard(source.getSourceId());
|
||||
boolean kicked = KickedCondition.getInstance().apply(game, source);
|
||||
for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterLandPermanent(), source.getControllerId(), source.getSourceId(), game)) {
|
||||
if ((!kicked && permanent.getControllerId().equals(source.getControllerId()))
|
||||
|| kicked) {
|
||||
permanent.destroy(source.getSourceId(), game, false);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DesolationAngelEntersBattlefieldEffect copy() {
|
||||
return new DesolationAngelEntersBattlefieldEffect(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -30,25 +30,26 @@ package mage.sets.apocalypse;
|
|||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.SpellCastAllTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.FilterSpell;
|
||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.game.stack.Spell;
|
||||
|
||||
/**
|
||||
* @author Loki
|
||||
*/
|
||||
public class GladeGnarr extends CardImpl {
|
||||
|
||||
private static final FilterSpell filter = new FilterSpell("a blue spell");
|
||||
|
||||
static {
|
||||
filter.add(new ColorPredicate(ObjectColor.BLUE));
|
||||
}
|
||||
|
||||
public GladeGnarr(UUID ownerId) {
|
||||
super(ownerId, 78, "Glade Gnarr", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{5}{G}");
|
||||
this.expansionSetCode = "APC";
|
||||
|
@ -56,7 +57,9 @@ public class GladeGnarr extends CardImpl {
|
|||
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
this.addAbility(new GladeGnarrTriggeredAbility());
|
||||
|
||||
// Whenever a player casts a blue spell, Glade Gnarr gets +2/+2 until end of turn.
|
||||
this.addAbility(new SpellCastAllTriggeredAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn), filter, false));
|
||||
}
|
||||
|
||||
public GladeGnarr(final GladeGnarr card) {
|
||||
|
@ -68,41 +71,3 @@ public class GladeGnarr extends CardImpl {
|
|||
return new GladeGnarr(this);
|
||||
}
|
||||
}
|
||||
|
||||
class GladeGnarrTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private static final FilterCard filter = new FilterCard("a black spell");
|
||||
|
||||
static {
|
||||
filter.add(new ColorPredicate(ObjectColor.BLACK));
|
||||
}
|
||||
|
||||
public GladeGnarrTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new BoostSourceEffect(2, 2, Duration.EndOfTurn), false);
|
||||
}
|
||||
|
||||
public GladeGnarrTriggeredAbility(final GladeGnarrTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == EventType.SPELL_CAST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Spell spell = game.getStack().getSpell(event.getTargetId());
|
||||
return spell != null && filter.match(spell, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a player casts " + filter.getMessage() + ", " + super.getRule();
|
||||
}
|
||||
|
||||
@Override
|
||||
public GladeGnarrTriggeredAbility copy() {
|
||||
return new GladeGnarrTriggeredAbility(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/arabiannights/Aladdin.java
Normal file
52
Mage.Sets/src/mage/sets/arabiannights/Aladdin.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.arabiannights;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author nigelzor
|
||||
*/
|
||||
public class Aladdin extends mage.sets.masterseditioniv.Aladdin {
|
||||
|
||||
public Aladdin(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 42;
|
||||
this.expansionSetCode = "ARN";
|
||||
}
|
||||
|
||||
public Aladdin(final Aladdin card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Aladdin copy() {
|
||||
return new Aladdin(this);
|
||||
}
|
||||
}
|
|
@ -34,6 +34,7 @@ import mage.abilities.costs.common.TapSourceCost;
|
|||
import mage.abilities.costs.common.TapTargetCost;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
|
@ -46,7 +47,6 @@ import mage.filter.predicate.permanent.TappedPredicate;
|
|||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.token.SpiritWhiteToken;
|
||||
import mage.game.permanent.token.Token;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
@ -111,8 +111,7 @@ class GallowsAtWillowHillEffect extends OneShotEffect {
|
|||
Player controller = game.getPlayer(permanent.getControllerId());
|
||||
permanent.destroy(source.getSourceId(), game, false);
|
||||
if (controller != null) {
|
||||
Token spirit = new SpiritWhiteToken("AVR", 1);
|
||||
spirit.putOntoBattlefield(1, game, source.getSourceId(), controller.getId());
|
||||
new CreateTokenEffect(new SpiritWhiteToken()).apply(game, source);
|
||||
}
|
||||
affectedTargets++;
|
||||
}
|
||||
|
|
|
@ -27,20 +27,22 @@
|
|||
*/
|
||||
package mage.sets.avacynrestored;
|
||||
|
||||
import mage.constants.*;
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.ReplacementEffectImpl;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.DamageCreatureEvent;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author noxx
|
||||
*/
|
||||
|
@ -86,19 +88,19 @@ class GloomSurgeonEffect extends ReplacementEffectImpl {
|
|||
int preventedDamage = event.getAmount();
|
||||
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, source.getFirstTarget(), source.getSourceId(), source.getControllerId(), preventedDamage));
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
if (player != null) {
|
||||
player.moveCards(player.getLibrary().getTopCards(game, preventedDamage), Zone.LIBRARY, Zone.EXILED, source, game);
|
||||
if (player != null) {
|
||||
player.moveCards(player.getLibrary().getTopCards(game, preventedDamage), Zone.EXILED, source, game);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean checksEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.DAMAGE_CREATURE;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
if (event.getTargetId().equals(source.getSourceId())) {
|
||||
|
|
|
@ -54,7 +54,7 @@ public class MoonsilverSpear extends CardImpl {
|
|||
// Equipped creature has first strike.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT)));
|
||||
// Whenever equipped creature attacks, put a 4/4 white Angel creature token with flying onto the battlefield.
|
||||
this.addAbility(new AttacksAttachedTriggeredAbility(new CreateTokenEffect(new AngelToken(expansionSetCode))));
|
||||
this.addAbility(new AttacksAttachedTriggeredAbility(new CreateTokenEffect(new AngelToken())));
|
||||
// Equip {4}
|
||||
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(4)));
|
||||
}
|
||||
|
|
|
@ -38,6 +38,8 @@ import mage.abilities.effects.common.ExileTargetForSourceEffect;
|
|||
import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.permanent.AnotherPredicate;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
@ -47,6 +49,11 @@ import java.util.UUID;
|
|||
*/
|
||||
public class NephaliaSmuggler extends CardImpl {
|
||||
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another target creature you control");
|
||||
static {
|
||||
filter.add(new AnotherPredicate());
|
||||
}
|
||||
|
||||
public NephaliaSmuggler(UUID ownerId) {
|
||||
super(ownerId, 69, "Nephalia Smuggler", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{U}");
|
||||
this.expansionSetCode = "AVR";
|
||||
|
@ -60,7 +67,7 @@ public class NephaliaSmuggler extends CardImpl {
|
|||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetForSourceEffect(), new ManaCostsImpl("{3}{U}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true));
|
||||
ability.addTarget(new TargetControlledCreaturePermanent());
|
||||
ability.addTarget(new TargetControlledCreaturePermanent(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
@ -141,7 +141,7 @@ class StolenGoodsCastFromExileEffect extends AsThoughEffectImpl {
|
|||
Card card = game.getCard(sourceId);
|
||||
if (card != null && game.getState().getZone(sourceId) == Zone.EXILED) {
|
||||
Player player = game.getPlayer(affectedControllerId);
|
||||
player.setCastSourceIdWithAlternateMana(sourceId, null);
|
||||
player.setCastSourceIdWithAlternateMana(sourceId, null, null);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,6 @@ import java.util.UUID;
|
|||
import mage.MageInt;
|
||||
import mage.ObjectColor;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.DelayedTriggeredAbility;
|
||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.SacrificeTargetEffect;
|
||||
|
@ -87,18 +86,14 @@ class ThatcherRevoltEffect extends OneShotEffect {
|
|||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
RedHumanToken token = new RedHumanToken();
|
||||
token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId());
|
||||
Permanent permanent = game.getPermanent(token.getLastAddedToken());
|
||||
if (permanent != null) {
|
||||
SacrificeTargetEffect sacrificeEffect = new SacrificeTargetEffect("sacrifice this token", source.getControllerId());
|
||||
sacrificeEffect.setTargetPointer(new FixedTarget(permanent, game));
|
||||
DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect);
|
||||
delayedAbility.setSourceId(source.getSourceId());
|
||||
delayedAbility.setControllerId(source.getControllerId());
|
||||
delayedAbility.setSourceObject(source.getSourceObject(game), game);
|
||||
game.addDelayedTriggeredAbility(delayedAbility);
|
||||
RedHumanToken token = new RedHumanToken();
|
||||
token.putOntoBattlefield(3, game, source.getSourceId(), source.getControllerId());
|
||||
for (UUID tokenId : token.getLastAddedTokenIds()) {
|
||||
Permanent tokenPermanent = game.getPermanent(tokenId);
|
||||
if (tokenPermanent != null) {
|
||||
SacrificeTargetEffect sacrificeEffect = new SacrificeTargetEffect();
|
||||
sacrificeEffect.setTargetPointer(new FixedTarget(tokenPermanent, game));
|
||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect), source);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -30,7 +30,6 @@ package mage.sets.battleforzendikar;
|
|||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.DelayedTriggeredAbility;
|
||||
import mage.abilities.common.LandfallAbility;
|
||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
|
@ -44,6 +43,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Outcome;
|
||||
import mage.constants.Rarity;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.token.Token;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
|
@ -97,13 +97,14 @@ class AkoumStonewakerEffect extends OneShotEffect {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
Token token = new AkoumStonewakerElementalToken();
|
||||
if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) {
|
||||
ExileTargetEffect exileEffect = new ExileTargetEffect();
|
||||
exileEffect.setTargetPointer(new FixedTarget(token.getLastAddedToken()));
|
||||
DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect);
|
||||
delayedAbility.setSourceId(source.getSourceId());
|
||||
delayedAbility.setControllerId(source.getControllerId());
|
||||
delayedAbility.setSourceObject(source.getSourceObject(game), game);
|
||||
game.addDelayedTriggeredAbility(delayedAbility);
|
||||
for (UUID tokenId : token.getLastAddedTokenIds()) {
|
||||
Permanent tokenPermanent = game.getPermanent(tokenId);
|
||||
if (tokenPermanent != null) {
|
||||
ExileTargetEffect exileEffect = new ExileTargetEffect();
|
||||
exileEffect.setTargetPointer(new FixedTarget(tokenPermanent, game));
|
||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(exileEffect), source);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -122,5 +123,6 @@ class AkoumStonewakerElementalToken extends Token {
|
|||
this.addAbility(TrampleAbility.getInstance());
|
||||
this.addAbility(HasteAbility.getInstance());
|
||||
this.setOriginalExpansionSetCode("BFZ");
|
||||
this.setTokenType(1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@ class OmnathElementalToken extends Token {
|
|||
|
||||
OmnathElementalToken() {
|
||||
super("Elemental", "5/5 red and green Elemental creature token");
|
||||
setTokenType(1);
|
||||
setTokenType(2);
|
||||
setOriginalExpansionSetCode("BFZ");
|
||||
cardType.add(CardType.CREATURE);
|
||||
subtype.add("Elemental");
|
||||
|
|
|
@ -109,16 +109,16 @@ class VoidWinnowerCantCastEffect extends ContinuousRuleModifyingEffectImpl {
|
|||
|
||||
@Override
|
||||
public boolean checksEventType(GameEvent event, Game game) {
|
||||
return event.getType() == EventType.CAST_SPELL;
|
||||
return event.getType() == EventType.CAST_SPELL_LATE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||
if (game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) {
|
||||
MageObject object = game.getObject(event.getSourceId());
|
||||
if (object != null && (object instanceof Spell)) {
|
||||
Spell spell = game.getStack().getSpell(event.getTargetId());
|
||||
if (spell != null) {
|
||||
// the low bit will always be set on an odd number.
|
||||
return (((Spell) object).getConvertedManaCost() & 1) == 0;
|
||||
return (spell.getConvertedManaCost() & 1) == 0;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -30,6 +30,7 @@ package mage.sets.battleforzendikar;
|
|||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
@ -102,9 +103,8 @@ class ZadaHedronGrinderTriggeredAbility extends TriggeredAbilityImpl {
|
|||
Spell spell = game.getStack().getSpell(event.getTargetId());
|
||||
if (isControlledInstantOrSorcery(spell)) {
|
||||
boolean targetsSource = false;
|
||||
for (UUID modeId : spell.getSpellAbility().getModes().getSelectedModes()) {
|
||||
spell.getSpellAbility().getModes().setActiveMode(modeId);
|
||||
for (Target target : spell.getSpellAbility().getTargets()) {
|
||||
for (Mode mode : spell.getSpellAbility().getModes().getSelectedModes()) {
|
||||
for (Target target : mode.getTargets()) {
|
||||
for (UUID targetId : target.getTargets()) {
|
||||
if (targetId.equals(getSourceId())) {
|
||||
targetsSource = true;
|
||||
|
@ -161,9 +161,8 @@ class ZadaHedronGrinderEffect extends OneShotEffect {
|
|||
if (spell != null && controller != null) {
|
||||
Target usedTarget = null;
|
||||
setUsedTarget:
|
||||
for (UUID modeId : spell.getSpellAbility().getModes().getSelectedModes()) {
|
||||
spell.getSpellAbility().getModes().setActiveMode(modeId);
|
||||
for (Target target : spell.getSpellAbility().getTargets()) {
|
||||
for (Mode mode : spell.getSpellAbility().getModes().getSelectedModes()) {
|
||||
for (Target target : mode.getTargets()) {
|
||||
if (target.getFirstTarget().equals(source.getSourceId())) {
|
||||
usedTarget = target.copy();
|
||||
usedTarget.clearChosen();
|
||||
|
@ -178,9 +177,8 @@ class ZadaHedronGrinderEffect extends OneShotEffect {
|
|||
if (!creature.getId().equals(source.getSourceId()) && usedTarget.canTarget(source.getControllerId(), creature.getId(), source, game)) {
|
||||
Spell copy = spell.copySpell();
|
||||
setTarget:
|
||||
for (UUID modeId : spell.getSpellAbility().getModes().getSelectedModes()) {
|
||||
copy.getSpellAbility().getModes().setActiveMode(modeId);
|
||||
for (Target target : copy.getSpellAbility().getTargets()) {
|
||||
for (Mode mode : spell.getSpellAbility().getModes().getSelectedModes()) {
|
||||
for (Target target : mode.getTargets()) {
|
||||
if (target.getClass().equals(usedTarget.getClass()) && target.getMessage().equals(usedTarget.getMessage())) {
|
||||
target.clearChosen();
|
||||
target.add(creature.getId(), game);
|
||||
|
|
|
@ -74,9 +74,9 @@ public class MogisGodOfSlaughter extends CardImpl {
|
|||
// As long as your devotion to black and red is less than seven, Mogis isn't a creature.
|
||||
Effect effect = new LoseCreatureTypeSourceEffect(new DevotionCount(ColoredManaSymbol.B, ColoredManaSymbol.R), 7);
|
||||
effect.setText("As long as your devotion to black and red is less than seven, Mogis isn't a creature");
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||
|
||||
// At the beginning of each opponent's upkeep, Mogis deals 2 damage to that player unless he or she sacrifices a creature.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||
|
||||
// At the beginning of each opponent's upkeep, Mogis deals 2 damage to that player unless he or she sacrifices a creature.
|
||||
effect = new DoUnlessTargetPaysCost(new DamageTargetEffect(2, false, "that player"), new SacrificeTargetCost(new TargetControlledCreaturePermanent()),
|
||||
"Sacrifice a creature? (otherwise you get 2 damage)");
|
||||
effect.setText("Mogis deals 2 damage to that player unless he or she sacrifices a creature");
|
||||
|
@ -95,6 +95,7 @@ public class MogisGodOfSlaughter extends CardImpl {
|
|||
}
|
||||
|
||||
class DoUnlessTargetPaysCost extends OneShotEffect {
|
||||
|
||||
private final OneShotEffect executingEffect;
|
||||
private final Cost cost;
|
||||
private final String userMessage;
|
||||
|
@ -102,6 +103,7 @@ class DoUnlessTargetPaysCost extends OneShotEffect {
|
|||
public DoUnlessTargetPaysCost(OneShotEffect effect, Cost cost) {
|
||||
this(effect, cost, null);
|
||||
}
|
||||
|
||||
public DoUnlessTargetPaysCost(OneShotEffect effect, Cost cost, String userMessage) {
|
||||
super(Outcome.Benefit);
|
||||
this.executingEffect = effect;
|
||||
|
@ -123,7 +125,7 @@ class DoUnlessTargetPaysCost extends OneShotEffect {
|
|||
if (player != null && mageObject != null) {
|
||||
String message = userMessage;
|
||||
if (message == null) {
|
||||
message = new StringBuilder(getCostText()).append(" to prevent ").append(executingEffect.getText(source.getModes().getMode())).append("?").toString();
|
||||
message = getCostText() + " to prevent " + executingEffect.getText(source.getModes().getMode()) + "?";
|
||||
}
|
||||
message = CardUtil.replaceSourceName(message, mageObject.getLogName());
|
||||
cost.clearPaid();
|
||||
|
@ -132,8 +134,8 @@ class DoUnlessTargetPaysCost extends OneShotEffect {
|
|||
}
|
||||
if (!cost.isPaid()) {
|
||||
executingEffect.setTargetPointer(this.targetPointer);
|
||||
return executingEffect.apply(game, source);
|
||||
}
|
||||
return executingEffect.apply(game, source);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -153,8 +155,8 @@ class DoUnlessTargetPaysCost extends OneShotEffect {
|
|||
private String getCostText() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String costText = cost.getText();
|
||||
if (costText != null &&
|
||||
!costText.toLowerCase().startsWith("discard")
|
||||
if (costText != null
|
||||
&& !costText.toLowerCase().startsWith("discard")
|
||||
&& !costText.toLowerCase().startsWith("sacrifice")
|
||||
&& !costText.toLowerCase().startsWith("remove")) {
|
||||
sb.append("pay ");
|
||||
|
|
|
@ -29,17 +29,16 @@ package mage.sets.championsofkamigawa;
|
|||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
|
@ -76,7 +75,10 @@ public class SosukeSonOfSeshiro extends CardImpl {
|
|||
// Other Snake creatures you control get +1/+0.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 0, Duration.WhileOnBattlefield, filter, true)));
|
||||
// Whenever a Warrior you control deals combat damage to a creature, destroy that creature at end of combat.
|
||||
this.addAbility(new SosukeSonOfSeshiroTriggeredAbility());
|
||||
Effect effect = new CreateDelayedTriggeredAbilityEffect(
|
||||
new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect()), true);
|
||||
effect.setText("destroy that creature at end of combat");
|
||||
this.addAbility(new SosukeSonOfSeshiroTriggeredAbility(effect));
|
||||
}
|
||||
|
||||
public SosukeSonOfSeshiro(final SosukeSonOfSeshiro card) {
|
||||
|
@ -91,8 +93,8 @@ public class SosukeSonOfSeshiro extends CardImpl {
|
|||
|
||||
class SosukeSonOfSeshiroTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
SosukeSonOfSeshiroTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new SosukeSonOfSeshiroEffect());
|
||||
SosukeSonOfSeshiroTriggeredAbility(Effect effect) {
|
||||
super(Zone.BATTLEFIELD, effect);
|
||||
}
|
||||
|
||||
SosukeSonOfSeshiroTriggeredAbility(final SosukeSonOfSeshiroTriggeredAbility ability) {
|
||||
|
@ -128,35 +130,3 @@ class SosukeSonOfSeshiroTriggeredAbility extends TriggeredAbilityImpl {
|
|||
return "Whenever a Warrior you control deals combat damage to a creature, destroy that creature at end of combat.";
|
||||
}
|
||||
}
|
||||
|
||||
class SosukeSonOfSeshiroEffect extends OneShotEffect {
|
||||
|
||||
SosukeSonOfSeshiroEffect() {
|
||||
super(Outcome.DestroyPermanent);
|
||||
staticText = "destroy that creature at end of combat";
|
||||
}
|
||||
|
||||
SosukeSonOfSeshiroEffect(final SosukeSonOfSeshiroEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent targetCreature = game.getPermanent(this.getTargetPointer().getFirst(game, source));
|
||||
if (targetCreature != null) {
|
||||
AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new DestroyTargetEffect());
|
||||
delayedAbility.setSourceId(source.getSourceId());
|
||||
delayedAbility.setControllerId(source.getControllerId());
|
||||
delayedAbility.setSourceObject(source.getSourceObject(game), game);
|
||||
delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(targetCreature.getId()));
|
||||
game.addDelayedTriggeredAbility(delayedAbility);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SosukeSonOfSeshiroEffect copy() {
|
||||
return new SosukeSonOfSeshiroEffect(this);
|
||||
}
|
||||
}
|
111
Mage.Sets/src/mage/sets/commander/AcornCatapult.java
Normal file
111
Mage.Sets/src/mage/sets/commander/AcornCatapult.java
Normal file
|
@ -0,0 +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.commander;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.token.SquirrelToken;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCreatureOrPlayer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LoneFox
|
||||
*/
|
||||
public class AcornCatapult extends CardImpl {
|
||||
|
||||
public AcornCatapult(UUID ownerId) {
|
||||
super(ownerId, 241, "Acorn Catapult", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{4}");
|
||||
this.expansionSetCode = "CMD";
|
||||
|
||||
// {1}, {tap}: Acorn Catapult deals 1 damage to target creature or player. That creature's controller or that player puts a 1/1 green Squirrel creature token onto the battlefield.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl("{1}"));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addEffect(new AcornCatapultEffect());
|
||||
ability.addTarget(new TargetCreatureOrPlayer());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public AcornCatapult(final AcornCatapult card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AcornCatapult copy() {
|
||||
return new AcornCatapult(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class AcornCatapultEffect extends OneShotEffect {
|
||||
|
||||
public AcornCatapultEffect() {
|
||||
super(Outcome.PutCreatureInPlay);
|
||||
staticText = "that creature's controller or that player puts a 1/1 green Squirrel creature token onto the battlefield";
|
||||
}
|
||||
|
||||
public AcornCatapultEffect(final AcornCatapultEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AcornCatapultEffect copy() {
|
||||
return new AcornCatapultEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
UUID targetId = getTargetPointer().getFirst(game, source);
|
||||
Player player = game.getPlayer(targetId);
|
||||
if(player == null) {
|
||||
Permanent permanent = game.getPermanent(targetId);
|
||||
if(permanent != null) {
|
||||
player = game.getPlayer(permanent.getControllerId());
|
||||
}
|
||||
}
|
||||
|
||||
if(player != null) {
|
||||
new SquirrelToken().putOntoBattlefield(1, game, source.getSourceId(), player.getId());
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander/ReinsOfPower.java
Normal file
52
Mage.Sets/src/mage/sets/commander/ReinsOfPower.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public class ReinsOfPower extends mage.sets.stronghold.ReinsOfPower {
|
||||
|
||||
public ReinsOfPower(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 57;
|
||||
this.expansionSetCode = "CMD";
|
||||
}
|
||||
|
||||
public ReinsOfPower(final ReinsOfPower card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReinsOfPower copy() {
|
||||
return new ReinsOfPower(this);
|
||||
}
|
||||
}
|
|
@ -112,7 +112,7 @@ class TheMimeoplasmEffect extends OneShotEffect {
|
|||
Cards cardsToExile = new CardsImpl();
|
||||
cardsToExile.add(cardToCopy);
|
||||
cardsToExile.add(cardForCounters);
|
||||
controller.moveCards(cardsToExile, Zone.GRAVEYARD, Zone.EXILED, source, game);
|
||||
controller.moveCards(cardsToExile, Zone.EXILED, source, game);
|
||||
CopyEffect copyEffect = new CopyEffect(Duration.Custom, cardToCopy, source.getSourceId());
|
||||
game.addEffect(copyEffect, source);
|
||||
permanent.addCounters(CounterType.P1P1.createInstance(cardForCounters.getPower().getValue()), game);
|
||||
|
|
|
@ -45,7 +45,7 @@ import mage.filter.FilterSpell;
|
|||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.CardTypePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.token.Token;
|
||||
import mage.game.permanent.token.ThrullToken;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
|
@ -114,22 +114,10 @@ class EndrekSahrMasterBreederEffect extends OneShotEffect {
|
|||
if (spell != null) {
|
||||
int cmc = spell.getConvertedManaCost();
|
||||
if (cmc > 0) {
|
||||
return new CreateTokenEffect(new EndrekSahrMasterBreederThrullToken(), cmc).apply(game, source);
|
||||
return new CreateTokenEffect(new ThrullToken(), cmc).apply(game, source);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
class EndrekSahrMasterBreederThrullToken extends Token {
|
||||
|
||||
public EndrekSahrMasterBreederThrullToken() {
|
||||
super("Thrull", "1/1 black Thrull creature token");
|
||||
cardType.add(CardType.CREATURE);
|
||||
color.setBlack(true);
|
||||
subtype.add("Thrull");
|
||||
power = new MageInt(1);
|
||||
toughness = new MageInt(1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -131,7 +131,7 @@ class NayaSoulbeastReplacementEffect extends ReplacementEffectImpl {
|
|||
public static final String SOURCE_CAST_SPELL_ABILITY = "sourceCastSpellAbility";
|
||||
|
||||
public NayaSoulbeastReplacementEffect() {
|
||||
super(Duration.OneUse, Outcome.BoostCreature, true);
|
||||
super(Duration.OneUse, Outcome.BoostCreature);
|
||||
staticText = "{this} enters the battlefield with X +1/+1 counters on it, where X is the total converted mana cost of all cards revealed this way";
|
||||
}
|
||||
|
||||
|
|
|
@ -106,6 +106,6 @@ class TerraRavagerLandCount implements DynamicValue {
|
|||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "land defending player controls";
|
||||
return "the number of lands defending player controls";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -129,20 +129,22 @@ class NahiriTheLithomancerFirstAbilityEffect extends OneShotEffect {
|
|||
if (controller != null) {
|
||||
Token token = new KorSoldierToken();
|
||||
if (token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId())) {
|
||||
Permanent tokenPermanent = game.getPermanent(token.getLastAddedToken());
|
||||
if (tokenPermanent != null) {
|
||||
//TODO: Make sure the Equipment can legally enchant the token, preferably on targetting.
|
||||
Target target = new TargetControlledPermanent(0, 1, filter, true);
|
||||
if (target.canChoose(source.getSourceId(), controller.getId(), game)
|
||||
&& controller.chooseUse(outcome, "Attach an Equipment you control to the created Token?", source, game)) {
|
||||
if (target.choose(Outcome.Neutral, source.getControllerId(), source.getSourceId(), game)) {
|
||||
Permanent equipmentPermanent = game.getPermanent(target.getFirstTarget());
|
||||
if (equipmentPermanent != null) {
|
||||
Permanent attachedTo = game.getPermanent(equipmentPermanent.getAttachedTo());
|
||||
if (attachedTo != null) {
|
||||
attachedTo.removeAttachment(equipmentPermanent.getId(), game);
|
||||
for (UUID tokenId : token.getLastAddedTokenIds()) {
|
||||
Permanent tokenPermanent = game.getPermanent(tokenId);
|
||||
if (tokenPermanent != null) {
|
||||
//TODO: Make sure the Equipment can legally enchant the token, preferably on targetting.
|
||||
Target target = new TargetControlledPermanent(0, 1, filter, true);
|
||||
if (target.canChoose(source.getSourceId(), controller.getId(), game)
|
||||
&& controller.chooseUse(outcome, "Attach an Equipment you control to the created " + tokenPermanent.getIdName() + "?", source, game)) {
|
||||
if (target.choose(Outcome.Neutral, source.getControllerId(), source.getSourceId(), game)) {
|
||||
Permanent equipmentPermanent = game.getPermanent(target.getFirstTarget());
|
||||
if (equipmentPermanent != null) {
|
||||
Permanent attachedTo = game.getPermanent(equipmentPermanent.getAttachedTo());
|
||||
if (attachedTo != null) {
|
||||
attachedTo.removeAttachment(equipmentPermanent.getId(), game);
|
||||
}
|
||||
tokenPermanent.addAttachment(equipmentPermanent.getId(), game);
|
||||
}
|
||||
tokenPermanent.addAttachment(equipmentPermanent.getId(), game);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
52
Mage.Sets/src/mage/sets/commander2015/AEtherize.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/AEtherize.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class AEtherize extends mage.sets.gatecrash.AEtherize {
|
||||
|
||||
public AEtherize(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 85;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public AEtherize(final AEtherize card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AEtherize copy() {
|
||||
return new AEtherize(this);
|
||||
}
|
||||
}
|
94
Mage.Sets/src/mage/sets/commander2015/AEthersnatch.java
Normal file
94
Mage.Sets/src/mage/sets/commander2015/AEthersnatch.java
Normal file
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Rarity;
|
||||
import mage.game.Game;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetSpell;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public class AEthersnatch extends CardImpl {
|
||||
|
||||
public AEthersnatch(UUID ownerId) {
|
||||
super(ownerId, 9, "AEthersnatch", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{4}{U}{U}");
|
||||
this.expansionSetCode = "C15";
|
||||
|
||||
// Gain control of target spell. You may choose new targets for it.
|
||||
this.getSpellAbility().addEffect(new AEthersnatchEffect());
|
||||
this.getSpellAbility().addTarget(new TargetSpell());
|
||||
}
|
||||
|
||||
public AEthersnatch(final AEthersnatch card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AEthersnatch copy() {
|
||||
return new AEthersnatch(this);
|
||||
}
|
||||
}
|
||||
|
||||
class AEthersnatchEffect extends OneShotEffect {
|
||||
|
||||
AEthersnatchEffect() {
|
||||
super(Outcome.GainControl);
|
||||
this.staticText = "Gain control of target spell. You may choose new targets for it";
|
||||
}
|
||||
|
||||
AEthersnatchEffect(final AEthersnatchEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AEthersnatchEffect copy() {
|
||||
return new AEthersnatchEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
Spell spell = game.getStack().getSpell(this.getTargetPointer().getFirst(game, source));
|
||||
if (controller != null && spell != null) {
|
||||
spell.setControllerId(controller.getId());
|
||||
spell.chooseNewTargets(game, controller.getId(), false, false, null);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/AcidicSlime.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/AcidicSlime.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class AcidicSlime extends mage.sets.magic2010.AcidicSlime {
|
||||
|
||||
public AcidicSlime(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 173;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public AcidicSlime(final AcidicSlime card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AcidicSlime copy() {
|
||||
return new AcidicSlime(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/ActOfAggression.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/ActOfAggression.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class ActOfAggression extends mage.sets.newphyrexia.ActOfAggression {
|
||||
|
||||
public ActOfAggression(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 141;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public ActOfAggression(final ActOfAggression card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActOfAggression copy() {
|
||||
return new ActOfAggression(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/AjanisChosen.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/AjanisChosen.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class AjanisChosen extends mage.sets.magic2014.AjanisChosen {
|
||||
|
||||
public AjanisChosen(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 57;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public AjanisChosen(final AjanisChosen card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjanisChosen copy() {
|
||||
return new AjanisChosen(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/AltarsReap.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/AltarsReap.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class AltarsReap extends mage.sets.innistrad.AltarsReap {
|
||||
|
||||
public AltarsReap(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 112;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public AltarsReap(final AltarsReap card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AltarsReap copy() {
|
||||
return new AltarsReap(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/AmbitionsCost.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/AmbitionsCost.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class AmbitionsCost extends mage.sets.eighthedition.AmbitionsCost {
|
||||
|
||||
public AmbitionsCost(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 113;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public AmbitionsCost(final AmbitionsCost card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AmbitionsCost copy() {
|
||||
return new AmbitionsCost(this);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class AncientAmphitheater extends mage.sets.lorwyn.AncientAmphitheater {
|
||||
|
||||
public AncientAmphitheater(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 276;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public AncientAmphitheater(final AncientAmphitheater card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AncientAmphitheater copy() {
|
||||
return new AncientAmphitheater(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/AncientCraving.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/AncientCraving.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class AncientCraving extends mage.sets.starter1999.AncientCraving {
|
||||
|
||||
public AncientCraving(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 114;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public AncientCraving(final AncientCraving card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AncientCraving copy() {
|
||||
return new AncientCraving(this);
|
||||
}
|
||||
}
|
144
Mage.Sets/src/mage/sets/commander2015/AnyaMercilessAngel.java
Normal file
144
Mage.Sets/src/mage/sets/commander2015/AnyaMercilessAngel.java
Normal file
|
@ -0,0 +1,144 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.MultipliedValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.abilities.keyword.IndestructibleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author emerald000
|
||||
*/
|
||||
public class AnyaMercilessAngel extends CardImpl {
|
||||
|
||||
public AnyaMercilessAngel(UUID ownerId) {
|
||||
super(ownerId, 41, "Anya, Merciless Angel", Rarity.MYTHIC, new CardType[]{CardType.CREATURE}, "{3}{R}{W}");
|
||||
this.expansionSetCode = "C15";
|
||||
this.supertype.add("Legendary");
|
||||
this.subtype.add("Angel");
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Anya, Merciless Angel gets +3/+3 for each opponent whose life total is less than half his or her starting life total.
|
||||
DynamicValue dValue = new MultipliedValue(new AnyaMercilessAngelDynamicValue(), 3);
|
||||
Effect effect = new BoostSourceEffect(dValue, dValue, Duration.WhileOnBattlefield);
|
||||
effect.setText("{this{ gets +3/+3 for each opponent whose life total is less than half his or her starting life total");
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(dValue, dValue, Duration.WhileOnBattlefield)));
|
||||
|
||||
// As long as an opponent's life total is less than half his or her starting life total, Anya has indestructible.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
|
||||
new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield),
|
||||
AnyaMercilessAngelCondition.getInstance(),
|
||||
"As long as an opponent's life total is less than half his or her starting life total, {this} has indestructible")));
|
||||
}
|
||||
|
||||
public AnyaMercilessAngel(final AnyaMercilessAngel card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnyaMercilessAngel copy() {
|
||||
return new AnyaMercilessAngel(this);
|
||||
}
|
||||
}
|
||||
|
||||
class AnyaMercilessAngelDynamicValue implements DynamicValue {
|
||||
|
||||
@Override
|
||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||
int opponentCount = 0;
|
||||
Player controller = game.getPlayer(sourceAbility.getControllerId());
|
||||
if (controller != null) {
|
||||
int startingLifeTotal = game.getLife();
|
||||
for (UUID opponentId : game.getOpponents(controller.getId())) {
|
||||
Player opponent = game.getPlayer(opponentId);
|
||||
if (opponent != null && opponent.getLife() < startingLifeTotal / 2) {
|
||||
opponentCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return opponentCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnyaMercilessAngelDynamicValue copy() {
|
||||
return new AnyaMercilessAngelDynamicValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "number of opponents whose life total is less than half his or her starting life total";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "X";
|
||||
}
|
||||
}
|
||||
|
||||
class AnyaMercilessAngelCondition implements Condition {
|
||||
|
||||
private static final AnyaMercilessAngelCondition fInstance = new AnyaMercilessAngelCondition();
|
||||
|
||||
public static AnyaMercilessAngelCondition getInstance() {
|
||||
return fInstance;
|
||||
};
|
||||
|
||||
private AnyaMercilessAngelCondition() {}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return new AnyaMercilessAngelDynamicValue().calculate(game, source, null) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "an opponent's life total is less than half his or her starting life total";
|
||||
}
|
||||
}
|
104
Mage.Sets/src/mage/sets/commander2015/Arachnogenesis.java
Normal file
104
Mage.Sets/src/mage/sets/commander2015/Arachnogenesis.java
Normal file
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.PreventAllDamageByAllEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Rarity;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.mageobject.SubtypePredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.combat.CombatGroup;
|
||||
import mage.game.permanent.token.SpiderToken;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class Arachnogenesis extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("non-Spider creatures");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.not(new SubtypePredicate("Spider")));
|
||||
}
|
||||
|
||||
public Arachnogenesis(UUID ownerId) {
|
||||
super(ownerId, 32, "Arachnogenesis", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{2}{G}");
|
||||
this.expansionSetCode = "C15";
|
||||
|
||||
// Put X 1/2 green Spider creature tokens with reach onto the battlefield, where X is the number of creatures attacking you.
|
||||
Effect effect = new CreateTokenEffect(new SpiderToken(), new ArachnogenesisCount());
|
||||
effect.setText("Put X 1/2 green Spider creature tokens with reach onto the battlefield, where X is the number of creatures attacking you");
|
||||
this.getSpellAbility().addEffect(effect);
|
||||
|
||||
// Prevent all combat damage that would be dealt this turn by non-Spider creatures.
|
||||
this.getSpellAbility().addEffect(new PreventAllDamageByAllEffect(filter, Duration.EndOfTurn, true));
|
||||
}
|
||||
|
||||
public Arachnogenesis(final Arachnogenesis card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Arachnogenesis copy() {
|
||||
return new Arachnogenesis(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ArachnogenesisCount implements DynamicValue {
|
||||
|
||||
@Override
|
||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||
int count = 0;
|
||||
for (CombatGroup combatGroup : game.getCombat().getGroups()) {
|
||||
if (combatGroup.getDefenderId().equals(sourceAbility.getControllerId())) {
|
||||
count += combatGroup.getAttackers().size();
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DynamicValue copy() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "creatures attacking you";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class ArbiterOfKnollridge extends mage.sets.lorwyn.ArbiterOfKnollridge {
|
||||
|
||||
public ArbiterOfKnollridge(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 59;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public ArbiterOfKnollridge(final ArbiterOfKnollridge card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArbiterOfKnollridge copy() {
|
||||
return new ArbiterOfKnollridge(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/ArborColossus.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/ArborColossus.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class ArborColossus extends mage.sets.theros.ArborColossus {
|
||||
|
||||
public ArborColossus(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 174;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public ArborColossus(final ArborColossus card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArborColossus copy() {
|
||||
return new ArborColossus(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/AuraOfSilence.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/AuraOfSilence.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class AuraOfSilence extends mage.sets.weatherlight.AuraOfSilence {
|
||||
|
||||
public AuraOfSilence(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 60;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public AuraOfSilence(final AuraOfSilence card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuraOfSilence copy() {
|
||||
return new AuraOfSilence(this);
|
||||
}
|
||||
}
|
102
Mage.Sets/src/mage/sets/commander2015/AwakenTheSkyTyrant.java
Normal file
102
Mage.Sets/src/mage/sets/commander2015/AwakenTheSkyTyrant.java
Normal file
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.DoIfCostPaid;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.token.DragonToken2;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class AwakenTheSkyTyrant extends CardImpl {
|
||||
|
||||
public AwakenTheSkyTyrant(UUID ownerId) {
|
||||
super(ownerId, 24, "Awaken the Sky Tyrant", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}");
|
||||
this.expansionSetCode = "C15";
|
||||
|
||||
// When a source an opponent controls deals damage to you, sacrifice Awaken the Sky Tyrant. If you do, put a 5/5 red Dragon creature token with flying onto the battlefield.
|
||||
this.addAbility(new AwakenTheSkyTyrantTriggeredAbility());
|
||||
}
|
||||
|
||||
public AwakenTheSkyTyrant(final AwakenTheSkyTyrant card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AwakenTheSkyTyrant copy() {
|
||||
return new AwakenTheSkyTyrant(this);
|
||||
}
|
||||
}
|
||||
|
||||
class AwakenTheSkyTyrantTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public AwakenTheSkyTyrantTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new DoIfCostPaid(new CreateTokenEffect(new DragonToken2(), 1), new SacrificeSourceCost(), null, false), false);
|
||||
}
|
||||
|
||||
public AwakenTheSkyTyrantTriggeredAbility(final AwakenTheSkyTyrantTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@java.lang.Override
|
||||
public AwakenTheSkyTyrantTriggeredAbility copy() {
|
||||
return new AwakenTheSkyTyrantTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@java.lang.Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType().equals(GameEvent.EventType.DAMAGED_PLAYER);
|
||||
}
|
||||
|
||||
@java.lang.Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (event.getTargetId().equals(controllerId)) {
|
||||
UUID sourceControllerId = game.getControllerId(event.getSourceId());
|
||||
if (sourceControllerId != null && game.getOpponents(getControllerId()).contains(sourceControllerId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@java.lang.Override
|
||||
public String getRule() {
|
||||
return "When a source an opponent controls deals damage to you, " + super.getRule();
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/BaneOfProgress.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/BaneOfProgress.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class BaneOfProgress extends mage.sets.commander2013.BaneOfProgress {
|
||||
|
||||
public BaneOfProgress(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 175;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public BaneOfProgress(final BaneOfProgress card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaneOfProgress copy() {
|
||||
return new BaneOfProgress(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/BanishingLight.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/BanishingLight.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class BanishingLight extends mage.sets.journeyintonyx.BanishingLight {
|
||||
|
||||
public BanishingLight(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 61;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public BanishingLight(final BanishingLight card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BanishingLight copy() {
|
||||
return new BanishingLight(this);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||
import mage.abilities.effects.common.discard.DiscardTargetEffect;
|
||||
import mage.abilities.keyword.MyriadAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Rarity;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class BansheeOfTheDreadChoir extends CardImpl {
|
||||
|
||||
public BansheeOfTheDreadChoir(UUID ownerId) {
|
||||
super(ownerId, 16, "Banshee of the Dread Choir", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{B}{B}");
|
||||
this.expansionSetCode = "C15";
|
||||
this.subtype.add("Spirit");
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Myriad
|
||||
this.addAbility(new MyriadAbility());
|
||||
// Whenever Banshee of the Dread Choir deals combat damage to a player, that player discards a card.
|
||||
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new DiscardTargetEffect(1), false, true));
|
||||
}
|
||||
|
||||
public BansheeOfTheDreadChoir(final BansheeOfTheDreadChoir card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BansheeOfTheDreadChoir copy() {
|
||||
return new BansheeOfTheDreadChoir(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/BarrenMoor.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/BarrenMoor.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class BarrenMoor extends mage.sets.onslaught.BarrenMoor {
|
||||
|
||||
public BarrenMoor(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 277;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public BarrenMoor(final BarrenMoor card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarrenMoor copy() {
|
||||
return new BarrenMoor(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/BarterInBlood.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/BarterInBlood.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class BarterInBlood extends mage.sets.avacynrestored.BarterInBlood {
|
||||
|
||||
public BarterInBlood(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 115;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public BarterInBlood(final BarterInBlood card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarterInBlood copy() {
|
||||
return new BarterInBlood(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/BasaltMonolith.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/BasaltMonolith.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class BasaltMonolith extends mage.sets.limitedalpha.BasaltMonolith {
|
||||
|
||||
public BasaltMonolith(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 244;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public BasaltMonolith(final BasaltMonolith card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasaltMonolith copy() {
|
||||
return new BasaltMonolith(this);
|
||||
}
|
||||
}
|
82
Mage.Sets/src/mage/sets/commander2015/BastionProtector.java
Normal file
82
Mage.Sets/src/mage/sets/commander2015/BastionProtector.java
Normal file
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.keyword.IndestructibleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.permanent.CommanderPredicate;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class BastionProtector extends CardImpl {
|
||||
|
||||
private final static FilterCreaturePermanent filter = new FilterCreaturePermanent("Commander creatures you control");
|
||||
|
||||
static {
|
||||
filter.add(new CommanderPredicate());
|
||||
}
|
||||
|
||||
public BastionProtector(UUID ownerId) {
|
||||
super(ownerId, 1, "Bastion Protector", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{W}");
|
||||
this.expansionSetCode = "C15";
|
||||
this.subtype.add("Human");
|
||||
this.subtype.add("Soldier");
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Commander creatures you control get +2/+2 and have indestructible.
|
||||
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, filter));
|
||||
Effect effect = new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield, filter);
|
||||
effect.setText("and have indestructible");
|
||||
ability.addEffect(effect);
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public BastionProtector(final BastionProtector card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BastionProtector copy() {
|
||||
return new BastionProtector(this);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class BeastmasterAscension extends mage.sets.zendikar.BeastmasterAscension {
|
||||
|
||||
public BeastmasterAscension(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 176;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public BeastmasterAscension(final BeastmasterAscension card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BeastmasterAscension copy() {
|
||||
return new BeastmasterAscension(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/BidentOfThassa.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/BidentOfThassa.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class BidentOfThassa extends mage.sets.theros.BidentOfThassa {
|
||||
|
||||
public BidentOfThassa(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 86;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public BidentOfThassa(final BidentOfThassa card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BidentOfThassa copy() {
|
||||
return new BidentOfThassa(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/BiomanticMastery.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/BiomanticMastery.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class BiomanticMastery extends mage.sets.dissension.BiomanticMastery {
|
||||
|
||||
public BiomanticMastery(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 239;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public BiomanticMastery(final BiomanticMastery card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiomanticMastery copy() {
|
||||
return new BiomanticMastery(this);
|
||||
}
|
||||
}
|
69
Mage.Sets/src/mage/sets/commander2015/BladeOfSelves.java
Normal file
69
Mage.Sets/src/mage/sets/commander2015/BladeOfSelves.java
Normal file
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||
import mage.abilities.keyword.EquipAbility;
|
||||
import mage.abilities.keyword.MyriadAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Rarity;
|
||||
import mage.constants.Zone;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class BladeOfSelves extends CardImpl {
|
||||
|
||||
public BladeOfSelves(UUID ownerId) {
|
||||
super(ownerId, 51, "Blade of Selves", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{2}");
|
||||
this.expansionSetCode = "C15";
|
||||
this.subtype.add("Equipment");
|
||||
|
||||
// Equipped creature has myriad.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(new MyriadAbility(), AttachmentType.EQUIPMENT)));
|
||||
|
||||
// Equip {4}
|
||||
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(4)));
|
||||
}
|
||||
|
||||
public BladeOfSelves(final BladeOfSelves card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BladeOfSelves copy() {
|
||||
return new BladeOfSelves(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/BlastedLandscape.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/BlastedLandscape.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class BlastedLandscape extends mage.sets.urzassaga.BlastedLandscape {
|
||||
|
||||
public BlastedLandscape(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 278;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public BlastedLandscape(final BlastedLandscape card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlastedLandscape copy() {
|
||||
return new BlastedLandscape(this);
|
||||
}
|
||||
}
|
52
Mage.Sets/src/mage/sets/commander2015/BlatantThievery.java
Normal file
52
Mage.Sets/src/mage/sets/commander2015/BlatantThievery.java
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.commander2015;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public class BlatantThievery extends mage.sets.onslaught.BlatantThievery {
|
||||
|
||||
public BlatantThievery(UUID ownerId) {
|
||||
super(ownerId);
|
||||
this.cardNumber = 87;
|
||||
this.expansionSetCode = "C15";
|
||||
}
|
||||
|
||||
public BlatantThievery(final BlatantThievery card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlatantThievery copy() {
|
||||
return new BlatantThievery(this);
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue