mirror of
https://github.com/correl/mage.git
synced 2025-04-02 03:18:09 -09:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
4df90d7d51
38569 changed files with 1055382 additions and 1325528 deletions
.gitignore.travis.yml
Mage.Client
pom.xmlserverlist.txt
release/sample-decks
2011
Event Decks
Starter Decks
2012/Starter Decks
2013
Modern
Bronze TCQ - Huntsville, TX (March 3)
DailyMTG
Standard
DailyMTG ReConstructed Crazy Chimera Combo
DailyMTG ReConstructed
Gildor Inglorion's Esper Control.dckJohn Sawatzky's Chandra's Flames.dckRoy Keck's AEtheRenFerno.dck
DailyMTG with M14
DailyMTG
Star City Games
2014
Legacy/Championship Philadelpia
Modern/MTGO Reconstructed/Casting Emrakul on Turn Three
Standard
DailyMTG Reconstructed/The Ephara Side
GP Stockholm 2014-11
Commander
Commander 2011
Commander 2013
Commander 2014
Commander 2015
Commander 2016
Breed Lethality (GWUB).dckEntropic Uprising (UBRG).dckInvent Superiority (WUBR).dckOpen Hostility (BRGW).dckStalwart Unity (RGWU) .dck
Commander 2017
Tasigur BGU.dckDecks to Beat
Devotion to Blue TDtB ST Aug 2014.mwDeck.dckDevotion to Blue TDtB ST Dec 2013.mwDeck.dckDevotion to Blue TDtB ST Feb 2014.mwDeck.dckDevotion to Blue TDtB ST Jul 2014.mwDeck.dckDevotion to Blue TDtB ST Jun 2014.mwDeck.dckDevotion to Blue TDtB ST Mar 2014.mwDeck.dckDevotion to Blue TDtB ST May 2014.mwDeck.dckDevotion to Blue TDtB ST Oct 2013.mwDeck.dckEsper Control TDtB ST Apr 2014.mwDeck.dckEsper Control TDtB ST Dec 2013.mwDeck.dckEsper Control TDtB ST Mar 2014.mwDeck.dckEsper Control TDtB ST May 2014.mwDeck.dckEsper Control TDtB ST Nov 2013.mwDeck.dckEsper Control TDtB ST Oct 2013.mwDeck.dckPrime Speaker Bant TDtB ST May 2013.mwDeck.dckTemur Aggro TDtB ST Dec 2014.mwDeck.dckUW Control TDtB ST Feb 2014.mwDeck.dckUW Control TDtB ST May 2014.mwDeck.dckUW Flash TDtB ST Jul 2013.mwDeck.dck
Duel Decks
Divine vs. Demonic
Elspeth vs. Kiora
Elspeth vs. Tezzeret
Jace vs. Chandra
Jace vs. Vraska
Nissa vs. Ob Nixilis
Venser vs. Koth
Planeswalk Decks
Ajani, Valiant Protector.dckChandra, Pyrogenius.dckGideon, Martial Paragon.dckLiliana, Death Wielder.dckNissa, Nature's Artisan.dckTezzeret, Master of Metal.dck
Top8 PT and Worlds decks (Standard)
Abzan Midrange 1 PT Khans of Tarkir (Honolulu) ST 10-12-14.dckAffinity(1) 58 World Championship 2004 (San Francisco) ST 9-5-04.dckDevotion to Blue 1 PT Theros (Dublin) ST 10-13-13.dckDevotion to Blue 34 PT Theros (Dublin) ST 10-13-13.dckEsper Control 58 PT Theros (Dublin) ST 10-13-13.dckUB Control Dragonless 34 PT Dragons of Tarkir (Brussels) ST 4-12-15.dck
sounds
src/main/java/mage/client
238
.gitignore
vendored
238
.gitignore
vendored
|
@ -1,99 +1,139 @@
|
|||
syntax: glob
|
||||
Mage.Client/*.dck
|
||||
Mage.Client/db
|
||||
Mage.Client/gamelogs
|
||||
Mage.Client/mageclient.log
|
||||
Mage.Client/plugins/images
|
||||
Mage.Client/plugins/plugin.data
|
||||
Mage.Client/target
|
||||
Mage.Common/target
|
||||
Mage.Plugins/Mage.Card.Plugin/target
|
||||
Mage.Plugins/Mage.Counter.Plugin/target
|
||||
Mage.Plugins/Mage.Theme.Plugin/target
|
||||
Mage.Plugins/Mage.Rating.Plugin/target
|
||||
Mage.Server.Console/target/
|
||||
Mage.Server.Console/mageadmin.log
|
||||
Mage.Server.Plugins/Mage.Deck.Constructed/target
|
||||
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
|
||||
Mage.Server.Plugins/Mage.Player.AI.MA/target
|
||||
Mage.Server.Plugins/Mage.Player.AI/target
|
||||
Mage.Server.Plugins/Mage.Player.AIMCTS/target
|
||||
Mage.Server.Plugins/Mage.Player.AIMinimax/target
|
||||
Mage.Server.Plugins/Mage.Player.Human/target
|
||||
Mage.Server.Plugins/Mage.Tournament.BoosterDraft/target
|
||||
Mage.Server.Plugins/Mage.Tournament.Constructed/target
|
||||
Mage.Server.Plugins/Mage.Tournament.Sealed/target
|
||||
Mage.Server/config/init.txt
|
||||
Mage.Server/saved
|
||||
Mage.Server/target
|
||||
Mage.Server/db
|
||||
Mage.Server/cache
|
||||
Mage.Server/mageserver.log
|
||||
Mage.Server/magediag.log
|
||||
Mage.Sets/target
|
||||
Mage.Stats/server.log
|
||||
Mage.Stats/mageserver.log
|
||||
Mage.Stats/magediag.log
|
||||
Mage.Tests/target
|
||||
Mage.Tests/cache
|
||||
Mage.Tests/db
|
||||
Mage.Tests/Mage.log
|
||||
Mage.Tests/watchdog.log
|
||||
Mage/target
|
||||
Mage.Updater/target
|
||||
mage.updater.client/target
|
||||
|
||||
releases
|
||||
Utils/author.txt
|
||||
.DS_Store
|
||||
.metadata
|
||||
.project
|
||||
.settings
|
||||
.idea
|
||||
syntax: regexp
|
||||
\.class
|
||||
\.jar
|
||||
\.iml
|
||||
\.ipr
|
||||
\.iws
|
||||
\.log
|
||||
nbactions.xml
|
||||
nbactions-*.xml
|
||||
nb-configuration.xml
|
||||
glob:Mage.Client/cheat.dck
|
||||
glob:Mage.Client/test.dck
|
||||
mage-bundle.zip
|
||||
mage-stats-ws.war
|
||||
|
||||
Mage.Server.Plugins/Mage.Draft.8PlayerBooster/target
|
||||
\.orig\..*$
|
||||
\.orig$
|
||||
\.chg\..*$
|
||||
\.rej$
|
||||
\.conflict\~$
|
||||
/Mage.Server.Plugins/Mage.Player.AIMCTS/target/
|
||||
|
||||
*.classpath
|
||||
*.iml
|
||||
hs_err*.log
|
||||
/submitted
|
||||
|
||||
/Mage.Server/config/ai.please.cast.this.txt
|
||||
/Mage.Stats/target/
|
||||
/Utils/*_unimplemented.txt
|
||||
*.netbeans_automatic_build
|
||||
*.txt
|
||||
Mage.Client/serverlist.txt
|
||||
/bin/
|
||||
/target/
|
||||
|
||||
client_secrets.json
|
||||
|
||||
dependency-reduced-pom.xml
|
||||
syntax: glob
|
||||
|
||||
# Mage.Client
|
||||
Mage.Client/*.dck
|
||||
Mage.Client/db
|
||||
Mage.Client/gamelogs
|
||||
Mage.Client/gamelogsJson
|
||||
Mage.Client/*.log
|
||||
Mage.Client/plugins/images
|
||||
Mage.Client/plugins/plugin.data
|
||||
Mage.Client/target
|
||||
Mage.Common/target
|
||||
/db
|
||||
/gamelogs
|
||||
/mageclient.log
|
||||
|
||||
# Mage.Plugins
|
||||
Mage.Plugins/Mage.Card.Plugin/target
|
||||
Mage.Plugins/Mage.Counter.Plugin/target
|
||||
Mage.Plugins/Mage.Theme.Plugin/target
|
||||
Mage.Plugins/Mage.Rating.Plugin/target
|
||||
|
||||
# Mage.Server
|
||||
Mage.Server/config/init.txt
|
||||
Mage.Server/saved
|
||||
Mage.Server/target
|
||||
Mage.Server/db
|
||||
Mage.Server/cache
|
||||
Mage.Server/mageserver.log
|
||||
Mage.Server/magediag.log
|
||||
Mage.Server/extensions
|
||||
/saved
|
||||
/db
|
||||
/cache
|
||||
/mageserver.log
|
||||
/magediag.log
|
||||
/extensions
|
||||
|
||||
Mage.Server.Console/target/
|
||||
Mage.Server.Console/mageadmin.log
|
||||
Mage.Server.Plugins/Mage.Deck.Constructed/target
|
||||
Mage.Server.Plugins/Mage.Deck.Limited/target
|
||||
Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/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.MomirGame/target/
|
||||
Mage.Server.Plugins/Mage.Game.PennyDreadfulCommanderFreeForAll/target
|
||||
Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/target/
|
||||
Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/target
|
||||
Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/target
|
||||
Mage.Server.Plugins/Mage.Player.AI.DraftBot/target
|
||||
Mage.Server.Plugins/Mage.Player.AI.MA/target
|
||||
Mage.Server.Plugins/Mage.Player.AI/target
|
||||
Mage.Server.Plugins/Mage.Player.AIMCTS/target
|
||||
Mage.Server.Plugins/Mage.Player.AIMinimax/target
|
||||
Mage.Server.Plugins/Mage.Player.Human/target
|
||||
Mage.Server.Plugins/Mage.Tournament.BoosterDraft/target
|
||||
Mage.Server.Plugins/Mage.Tournament.Constructed/target
|
||||
Mage.Server.Plugins/Mage.Tournament.Sealed/target
|
||||
|
||||
# Mage.Sets
|
||||
Mage.Sets/target
|
||||
|
||||
# Mage.Stats
|
||||
Mage.Stats/server.log
|
||||
Mage.Stats/mageserver.log
|
||||
Mage.Stats/magediag.log
|
||||
|
||||
# Mage.Tests
|
||||
Mage.Tests/target
|
||||
Mage.Tests/cache
|
||||
Mage.Tests/db
|
||||
Mage.Tests/Mage.log
|
||||
Mage.Tests/watchdog.log
|
||||
|
||||
# Mage
|
||||
Mage/target
|
||||
|
||||
# Mage.Updater
|
||||
Mage.Updater/target
|
||||
mage.updater.client/target
|
||||
|
||||
# Mage.Verify
|
||||
Mage.Verify/target
|
||||
Mage.Verify/AllCards.json.zip
|
||||
Mage.Verify/AllSets.json.zip
|
||||
|
||||
releases
|
||||
Utils/author.txt
|
||||
.DS_Store
|
||||
.metadata
|
||||
.project
|
||||
.settings
|
||||
.idea
|
||||
syntax: regexp
|
||||
\.class
|
||||
\.jar
|
||||
\.iml
|
||||
\.ipr
|
||||
\.iws
|
||||
\.log
|
||||
nbactions.xml
|
||||
nbactions-*.xml
|
||||
nb-configuration.xml
|
||||
glob:Mage.Client/cheat.dck
|
||||
glob:Mage.Client/test.dck
|
||||
mage-bundle.zip
|
||||
mage-stats-ws.war
|
||||
|
||||
Mage.Server.Plugins/Mage.Draft.8PlayerBooster/target
|
||||
\.orig\..*$
|
||||
\.orig$
|
||||
\.chg\..*$
|
||||
\.rej$
|
||||
\.conflict\~$
|
||||
/Mage.Server.Plugins/Mage.Player.AIMCTS/target/
|
||||
|
||||
*.classpath
|
||||
*.iml
|
||||
hs_err*.log
|
||||
/submitted
|
||||
|
||||
/Mage.Server/config/ai.please.cast.this.txt
|
||||
/Mage.Stats/target/
|
||||
/Utils/*_unimplemented.txt
|
||||
*.netbeans_automatic_build
|
||||
*.txt
|
||||
Mage.Client/serverlist.txt
|
||||
/bin/
|
||||
/out/
|
||||
/target/
|
||||
|
||||
client_secrets.json
|
||||
|
||||
dependency-reduced-pom.xml
|
||||
mage-bundle
|
||||
/Mage.Client/game-*.json
|
||||
|
|
5
.travis.yml
Normal file
5
.travis.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
sudo: required
|
||||
dist: trusty
|
||||
language: java
|
||||
before_install:
|
||||
- echo "MAVEN_OPTS='-Xmx2g'" > ~/.mavenrc
|
|
@ -1,201 +1,223 @@
|
|||
<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-root</artifactId>
|
||||
<version>1.4.13</version>
|
||||
</parent>
|
||||
|
||||
<groupId>org.mage</groupId>
|
||||
<artifactId>mage-client</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>Mage Client</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.mage</groupId>
|
||||
<artifactId>mage</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mage</groupId>
|
||||
<artifactId>mage-common</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mage</groupId>
|
||||
<artifactId>mage-deck-constructed</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.googlecode.jspf</groupId>
|
||||
<artifactId>jspf-core</artifactId>
|
||||
<version>0.9.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-log4j12</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.sf.trove4j</groupId>
|
||||
<artifactId>trove4j</artifactId>
|
||||
<version>3.0.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.mortennobel</groupId>
|
||||
<artifactId>java-image-scaling</artifactId>
|
||||
<version>0.8.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.collections</groupId>
|
||||
<artifactId>google-collections</artifactId>
|
||||
<version>1.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.swinglabs</groupId>
|
||||
<artifactId>swingx</artifactId>
|
||||
<version>1.6.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetlang</groupId>
|
||||
<artifactId>jetlang</artifactId>
|
||||
<version>0.2.9</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jgoodies</groupId>
|
||||
<artifactId>forms</artifactId>
|
||||
<version>1.2.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.intellij</groupId>
|
||||
<artifactId>forms_rt</artifactId>
|
||||
<version>7.0.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<type>jar</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>mage-counter-plugin</artifactId>
|
||||
<version>0.1</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jdesktop</groupId>
|
||||
<artifactId>beansbinding</artifactId>
|
||||
<version>1.2.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.swinglabs</groupId>
|
||||
<artifactId>swing-layout</artifactId>
|
||||
<version>1.0.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jsoup</groupId>
|
||||
<artifactId>jsoup</artifactId>
|
||||
<version>1.5.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<artifactId>truevfs-profile-base</artifactId>
|
||||
<groupId>net.java.truevfs</groupId>
|
||||
<type>jar</type>
|
||||
<version>0.10.8</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>truevfs-access-swing</artifactId>
|
||||
<groupId>net.java.truevfs</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>truecommons-key-swing</artifactId>
|
||||
<groupId>net.java.truecommons</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.googlecode.soundlibs</groupId>
|
||||
<artifactId>mp3spi</artifactId>
|
||||
<version>1.9.5-1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javazoom</groupId>
|
||||
<artifactId>jlayer</artifactId>
|
||||
<version>1.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mobicents.external.tritonus</groupId>
|
||||
<artifactId>tritonus_share</artifactId>
|
||||
<version>0.3.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.java.balloontip</groupId>
|
||||
<artifactId>balloontip</artifactId>
|
||||
<version>1.2.4.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<!-- to get the reference to local repository with com\googlecode\jspf\jspf-core\0.9.1\ -->
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>local-project-repo</id>
|
||||
<url>file://${project.basedir}/../repository</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-install-plugin</artifactId>
|
||||
<version>2.5.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifestFile>${manifest.file}</manifestFile>
|
||||
<manifest>
|
||||
<addClasspath>true</addClasspath>
|
||||
<mainClass>mage.client.MageFrame</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<configuration>
|
||||
<appendAssemblyId>false</appendAssemblyId>
|
||||
<descriptors>
|
||||
<descriptor>src/main/assembly/distribution.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
||||
<finalName>mage-client</finalName>
|
||||
</build>
|
||||
|
||||
<properties>
|
||||
<manifest.file>src/main/resources/META-INF/MANIFEST.MF</manifest.file>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
<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-root</artifactId>
|
||||
<version>1.4.28</version>
|
||||
</parent>
|
||||
|
||||
<groupId>org.mage</groupId>
|
||||
<artifactId>mage-client</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>Mage Client</name>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mage</groupId>
|
||||
<artifactId>mage</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mage</groupId>
|
||||
<artifactId>mage-common</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mage</groupId>
|
||||
<artifactId>mage-deck-constructed</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.googlecode.jspf</groupId>
|
||||
<artifactId>jspf-core</artifactId>
|
||||
<version>0.9.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-log4j12</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.sf.trove4j</groupId>
|
||||
<artifactId>trove4j</artifactId>
|
||||
<version>3.0.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.mortennobel</groupId>
|
||||
<artifactId>java-image-scaling</artifactId>
|
||||
<version>0.8.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.collections</groupId>
|
||||
<artifactId>google-collections</artifactId>
|
||||
<version>1.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.swinglabs</groupId>
|
||||
<artifactId>swingx</artifactId>
|
||||
<version>1.6.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetlang</groupId>
|
||||
<artifactId>jetlang</artifactId>
|
||||
<version>0.2.9</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.amazonaws</groupId>
|
||||
<artifactId>aws-java-sdk-s3</artifactId>
|
||||
<version>1.11.286</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jgoodies</groupId>
|
||||
<artifactId>forms</artifactId>
|
||||
<version>1.2.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.intellij</groupId>
|
||||
<artifactId>forms_rt</artifactId>
|
||||
<version>7.0.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<type>jar</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>mage-counter-plugin</artifactId>
|
||||
<version>0.1</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jdesktop</groupId>
|
||||
<artifactId>beansbinding</artifactId>
|
||||
<version>1.2.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.swinglabs</groupId>
|
||||
<artifactId>swing-layout</artifactId>
|
||||
<version>1.0.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jsoup</groupId>
|
||||
<artifactId>jsoup</artifactId>
|
||||
<version>1.5.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<artifactId>truevfs-profile-base</artifactId>
|
||||
<groupId>net.java.truevfs</groupId>
|
||||
<type>jar</type>
|
||||
<version>0.10.8</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>truevfs-access-swing</artifactId>
|
||||
<groupId>net.java.truevfs</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>truecommons-key-swing</artifactId>
|
||||
<groupId>net.java.truecommons</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.googlecode.soundlibs</groupId>
|
||||
<artifactId>mp3spi</artifactId>
|
||||
<version>1.9.5-1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javazoom</groupId>
|
||||
<artifactId>jlayer</artifactId>
|
||||
<version>1.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mobicents.external.tritonus</groupId>
|
||||
<artifactId>tritonus_share</artifactId>
|
||||
<version>0.3.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.java.balloontip</groupId>
|
||||
<artifactId>balloontip</artifactId>
|
||||
<version>1.2.4.1</version>
|
||||
</dependency>
|
||||
<!-- svg support start -->
|
||||
<!--
|
||||
for "SAX2 driver class org.apache.crimson.parser.XMLReaderImpl not found" error looks here:
|
||||
https://stackoverflow.com/questions/714243/sax2-driver-class-org-apache-crimson-parser-xmlreaderimpl-not-found-when-using
|
||||
-->
|
||||
<dependency>
|
||||
<groupId>org.apache.xmlgraphics</groupId>
|
||||
<artifactId>batik-transcoder</artifactId>
|
||||
<version>1.7</version>
|
||||
</dependency>
|
||||
<!-- svg support end -->
|
||||
<dependency>
|
||||
<groupId>org.ocpsoft.prettytime</groupId>
|
||||
<artifactId>prettytime</artifactId>
|
||||
<version>3.2.7.Final</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<!-- to get the reference to local repository with com\googlecode\jspf\jspf-core\0.9.1\ -->
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>local-project-repo</id>
|
||||
<url>file://${project.basedir}/../repository</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-install-plugin</artifactId>
|
||||
<version>2.5.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifestFile>${manifest.file}</manifestFile>
|
||||
<manifest>
|
||||
<addClasspath>true</addClasspath>
|
||||
<mainClass>mage.client.MageFrame</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<configuration>
|
||||
<appendAssemblyId>false</appendAssemblyId>
|
||||
<descriptors>
|
||||
<descriptor>src/main/assembly/distribution.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
||||
<finalName>mage-client</finalName>
|
||||
</build>
|
||||
|
||||
<properties>
|
||||
<manifest.file>src/main/resources/META-INF/MANIFEST.MF</manifest.file>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
|
|
|
@ -9,7 +9,7 @@ AUTHOR:WotC
|
|||
1 [SOM:194] Precursor Golem
|
||||
1 [SOM:205] Steel Hellkite
|
||||
3 [M12:71] Phantasmal Dragon
|
||||
4 [M12:41] AEther Adept
|
||||
4 [M12:41] Aether Adept
|
||||
1 [M12:72] Phantasmal Image
|
||||
4 [M12:70] Phantasmal Bear
|
||||
4 [NPH:19] Porcelain Legionnaire
|
||||
|
|
|
@ -4,7 +4,7 @@ AUTHOR:WotC
|
|||
|
||||
# Creature
|
||||
1 [M11:8] Blinding Mage
|
||||
2 [M11:41] AEther Adept
|
||||
2 [M11:41] Aether Adept
|
||||
2 [M11:42] Air Servant
|
||||
1 [M11:44] Armored Cancrix
|
||||
2 [M11:45] Augury Owl
|
||||
|
|
|
@ -8,7 +8,7 @@ AUTHOR:WotC
|
|||
1 [M12:33] Serra Angel
|
||||
1 [M12:34] Siege Mastodon
|
||||
2 [M12:38] Stormfront Pegasus
|
||||
1 [M12:41] AEther Adept
|
||||
1 [M12:41] Aether Adept
|
||||
2 [M12:44] Aven Fleetwing
|
||||
2 [M12:47] Cancel
|
||||
3 [M12:49] Coral Merfolk
|
||||
|
|
|
@ -18,7 +18,7 @@ NAME:[DKA] Grave Power
|
|||
2 [ISD:211] Wreath of Geists
|
||||
1 [M12:42] Alluring Siren
|
||||
2 [DKA:53] Tower Geist
|
||||
1 [M12:41] AEther Adept
|
||||
1 [M12:41] Aether Adept
|
||||
2 [DKA:117] Grim Flowering
|
||||
4 [ISD:253] Island
|
||||
2 [DKA:118] Hollowhenge Beast
|
||||
|
|
|
@ -9,7 +9,7 @@ NAME:Gabriel Joglar's Merfolk 2nd Place
|
|||
4 [SHM:34] Cursecatcher
|
||||
4 [ZEN:70] Spreading Seas
|
||||
4 [LRW:74] Merrow Reejerey
|
||||
2 [DST:91] AEther Vial
|
||||
2 [DST:91] Aether Vial
|
||||
17 [RTR:255] Island
|
||||
2 [ROE:57] Coralhelm Commander
|
||||
4 [LRW:86] Silvergill Adept
|
||||
|
|
|
@ -15,7 +15,7 @@ NAME:Elias Rudin's RUG Vial
|
|||
3 [RAV:63] Remand
|
||||
3 [DKA:140] Huntmaster of the Fells
|
||||
1 [MMA:190] Kitchen Finks
|
||||
4 [MMA:197] AEther Vial
|
||||
4 [MMA:197] Aether Vial
|
||||
1 [RTR:247] Steam Vents
|
||||
3 [ZEN:220] Misty Rainforest
|
||||
4 [RTR:255] Island
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
NAME:Nathan Kalsch's The God Complex
|
||||
2 [DGM:11] AEtherling
|
||||
2 [DGM:11] Aetherling
|
||||
4 [THS:56] Nimbus Naiad
|
||||
4 [RTR:215] Frostburn Weird
|
||||
2 [RTR:35] Cyclonic Rift
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
NAME:Gildor Inglorion's Esper Control
|
||||
1 [DGM:11] AEtherling
|
||||
1 [DGM:11] Aetherling
|
||||
4 [ISD:245] Nephalia Drownyard
|
||||
4 [RTR:145] Azorius Charm
|
||||
2 [DGM:5] Renounce the Guilds
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
NAME:Jonathan Gutierrez's Sphinx-Ghoul Revelation
|
||||
1 [RTR:208] Vraska the Unseen
|
||||
2 [DGM:11] AEtherling
|
||||
2 [DGM:11] Aetherling
|
||||
4 [RTR:243] Overgrown Tomb
|
||||
4 [M13:114] Veilborn Ghoul
|
||||
4 [M13:170] Farseek
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
NAME:Roy Keck's AEtheRenFerno
|
||||
2 [DGM:11] AEtherling
|
||||
2 [DGM:11] Aetherling
|
||||
1 [ISD:115] Sever the Bloodline
|
||||
1 [ISD:78] Snapcaster Mage
|
||||
4 [RTR:238] Blood Crypt
|
||||
|
|
|
@ -14,4 +14,4 @@ NAME:Coleman Jackson's Advent of the Arcanist
|
|||
3 [DIS:174] Hallowed Fountain
|
||||
3 [DGM:51] Advent of the Wurm
|
||||
4 [RTR:123] Druid's Deliverance
|
||||
3 [GTC:29] AEtherize
|
||||
3 [GTC:29] Aetherize
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
NAME:Michael Steidl's Planeswalker Control
|
||||
2 [RTR:208] Vraska the Unseen
|
||||
3 [M13:160] Arbor Elf
|
||||
2 [DGM:11] AEtherling
|
||||
2 [DGM:11] Aetherling
|
||||
1 [CON:120] Nicol Bolas, Planeswalker
|
||||
2 [RTR:44] Jace, Architect of Thought
|
||||
2 [RTR:82] Ultimate Price
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
NAME:Robert Seder's Esper Control
|
||||
1 [DKA:142] Sorin, Lord of Innistrad
|
||||
1 [DGM:11] AEtherling
|
||||
1 [DGM:11] Aetherling
|
||||
4 [M13:225] Glacial Fortress
|
||||
3 [ISD:83] Think Twice
|
||||
3 [RTR:145] Azorius Charm
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
NAME:Andy Sipka's Esper Control
|
||||
2 [DKA:142] Sorin, Lord of Innistrad
|
||||
1 [RTR:250] Plains
|
||||
2 [DGM:11] AEtherling
|
||||
2 [DGM:11] Aetherling
|
||||
4 [M13:225] Glacial Fortress
|
||||
4 [RTR:145] Azorius Charm
|
||||
1 [DKA:158] Vault of the Archangel
|
||||
|
|
|
@ -8,7 +8,7 @@ NAME:Louis Fata's Death and Taxes
|
|||
1 [BOK:163] Umezawa's Jitte
|
||||
2 [FUT:177] Horizon Canopy
|
||||
4 [CMD:21] Mother of Runes
|
||||
4 [MMA:197] AEther Vial
|
||||
4 [MMA:197] Aether Vial
|
||||
3 [M15:225] Phyrexian Revoker
|
||||
10 [KTK:250] Plains
|
||||
3 [LEG:248] Karakas
|
||||
|
|
|
@ -8,7 +8,7 @@ NAME:Dawn's GW Hatebears
|
|||
3 [DKA:24] Thalia, Guardian of Thraben
|
||||
4 [ISD:240] Ghost Quarter
|
||||
2 [FUT:18] Aven Mindcensor
|
||||
4 [MMA:197] AEther Vial
|
||||
4 [MMA:197] Aether Vial
|
||||
3 [M14:195] Scavenging Ooze
|
||||
2 [DDM:84] Forest
|
||||
2 [FUT:177] Horizon Canopy
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
NAME:AJ Owenss's Bant Control
|
||||
1 [DGM:11] AEtherling
|
||||
1 [DGM:11] Aetherling
|
||||
1 [C13:341] Island
|
||||
4 [RTR:145] Azorius Charm
|
||||
2 [BNG:149] Kiora, the Crashing Wave
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
NAME:Hayden's Pyxis of Possibly Planeswalker-Pertaining Pandemonium
|
||||
8 [C13:353] Forest
|
||||
1 [DGM:11] AEtherling
|
||||
1 [DGM:11] Aetherling
|
||||
8 [C13:341] Island
|
||||
3 [BNG:149] Kiora, the Crashing Wave
|
||||
3 [THS:209] Xenagos, the Reveler
|
||||
|
|
|
@ -23,4 +23,4 @@ SB: 4 [THS:107] Thoughtseize
|
|||
SB: 1 [THS:110] Whip of Erebos
|
||||
SB: 2 [JOU:154] Pharika, God of Affliction
|
||||
SB: 1 [KTK:81] Murderous Cut
|
||||
SB: 3 [BNG:143] Unravel the AEther
|
||||
SB: 3 [BNG:143] Unravel the Aether
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
1 [CMD:266] Barren Moor
|
||||
1 [CMD:269] Command Tower
|
||||
1 [CMD:272] Evolving Wilds
|
||||
10 [CMD:315] Forest
|
||||
1 [CMD:275] Golgari Rot Farm
|
||||
1 [CMD:283] Orzhov Basilica
|
||||
8 [CMD:299] Plains
|
||||
1 [CMD:285] Rupture Spire
|
||||
1 [CMD:286] Secluded Steppe
|
||||
1 [CMD:287] Selesnya Sanctuary
|
||||
8 [CMD:307] Swamp
|
||||
1 [CMD:290] Temple of the False God
|
||||
1 [CMD:292] Tranquil Thicket
|
||||
1 [CMD:295] Vivid Grove
|
||||
1 [CMD:296] Vivid Marsh
|
||||
1 [CMD:297] Vivid Meadow
|
||||
1 [CMD:141] Aquastrand Spider
|
||||
1 [CMD:10] Celestial Force
|
||||
1 [CMD:189] Chorus of the Conclave
|
||||
1 [CMD:76] Dark Hatchling
|
||||
1 [CMD:149] Deadly Recluse
|
||||
1 [CMD:154] Fertilid
|
||||
1 [CMD:201] Golgari Guildmage
|
||||
1 [CMD:159] Hornet Queen
|
||||
1 [CMD:207] Karador, Ghost Chieftain
|
||||
1 [CMD:20] Monk Realist
|
||||
1 [CMD:90] Nantuko Husk
|
||||
1 [CMD:167] Penumbra Spider
|
||||
1 [CMD:169] Sakura-Tribe Elder
|
||||
1 [CMD:170] Scavenging Ooze
|
||||
1 [CMD:223] Selesnya Evangel
|
||||
1 [CMD:224] Selesnya Guildmage
|
||||
1 [CMD:100] Shriekmaw
|
||||
1 [CMD:225] Sigil Captain
|
||||
1 [CMD:171] Spawnwrithe
|
||||
1 [CMD:172] Spike Feeder
|
||||
1 [CMD:173] Squallmonger
|
||||
1 [CMD:174] Symbiotic Wurm
|
||||
1 [CMD:230] Teneb, the Harvester
|
||||
1 [CMD:106] Vampire Nighthawk
|
||||
1 [CMD:234] Vish Kal, Blood Arbiter
|
||||
1 [CMD:179] Yavimaya Elder
|
||||
1 [CMD:241] Acorn Catapult
|
||||
1 [CMD:2] Afterlife
|
||||
1 [CMD:4] Alliance of Arms
|
||||
1 [CMD:72] Attrition
|
||||
1 [CMD:182] Aura Shards
|
||||
1 [CMD:142] Awakening Zone
|
||||
1 [CMD:144] Bestial Menace
|
||||
1 [CMD:146] Cobra Trap
|
||||
1 [CMD:148] Cultivate
|
||||
1 [CMD:245] Darksteel Ingot
|
||||
1 [CMD:192] Death Mutation
|
||||
1 [CMD:78] Doom Blade
|
||||
1 [CMD:156] Fists of Ironwood
|
||||
1 [CMD:84] Footbottom Feast
|
||||
1 [CMD:249] Golgari Signet
|
||||
1 [CMD:158] Harmonize
|
||||
1 [CMD:87] Hex
|
||||
1 [CMD:15] Hour of Reckoning
|
||||
1 [CMD:253] Lightning Greaves
|
||||
1 [CMD:211] Mortify
|
||||
1 [CMD:212] Necrogenesis
|
||||
1 [CMD:91] Nemesis Trap
|
||||
1 [CMD:23] Oblivion Ring
|
||||
1 [CMD:255] Orzhov Signet
|
||||
1 [CMD:258] Selesnya Signet
|
||||
1 [CMD:260] Skullclamp
|
||||
1 [CMD:261] Sol Ring
|
||||
1 [CMD:32] Soul Snare
|
||||
1 [CMD:34] Storm Herd
|
||||
1 [CMD:103] Syphon Flesh
|
||||
1 [CMD:175] Tribute to the Wild
|
||||
1 [CMD:36] Vow of Duty
|
||||
1 [CMD:107] Vow of Malice
|
||||
1 [CMD:178] Vow of Wildness
|
||||
SB: 1 [CMD:200] Ghave, Guru of Spores
|
|
@ -0,0 +1,86 @@
|
|||
1 [CMD:151] Elvish Aberration
|
||||
1 [CMD:272] Evolving Wilds
|
||||
1 [CMD:63] Spell Crumple
|
||||
1 [CMD:150] Deadwood Treefolk
|
||||
1 [CMD:197] Electrolyze
|
||||
1 [CMD:153] Explosive Vegetation
|
||||
1 [CMD:274] Fungal Reaches
|
||||
1 [CMD:196] Edric, Spymaster of Trest
|
||||
1 [CMD:155] Fierce Empath
|
||||
1 [CMD:199] Firespout
|
||||
1 [CMD:232] Valley Rannet
|
||||
1 [CMD:276] Gruul Turf
|
||||
1 [CMD:198] Fire // Ice
|
||||
1 [CMD:110] Avatar of Fury
|
||||
1 [CMD:68] Vow of Flight
|
||||
2 [CMD:311] Mountain
|
||||
1 [CMD:157] Garruk Wildspeaker
|
||||
1 [CMD:113] Chain Reaction
|
||||
1 [CMD:278] Izzet Boilerworks
|
||||
1 [CMD:233] Vengeful Rebirth
|
||||
1 [CMD:277] Homeward Path
|
||||
2 [CMD:313] Mountain
|
||||
1 [CMD:115] Chartooth Cougar
|
||||
2 [CMD:312] Mountain
|
||||
4 [CMD:315] Forest
|
||||
1 [CMD:65] Trench Gorger
|
||||
2 [CMD:314] Mountain
|
||||
3 [CMD:317] Forest
|
||||
1 [CMD:119] Disaster Radius
|
||||
1 [CMD:118] Death by Dragons
|
||||
3 [CMD:316] Forest
|
||||
1 [CMD:190] Colossal Might
|
||||
1 [CMD:181] Animar, Soul of Elements
|
||||
1 [CMD:261] Sol Ring
|
||||
1 [CMD:188] Call the Skybreaker
|
||||
1 [CMD:143] Baloth Woodcrasher
|
||||
1 [CMD:222] Savage Twister
|
||||
1 [CMD:148] Cultivate
|
||||
1 [CMD:269] Command Tower
|
||||
1 [CMD:147] Collective Voyage
|
||||
2 [CMD:304] Island
|
||||
2 [CMD:303] Island
|
||||
1 [CMD:226] Simic Sky Swallower
|
||||
1 [CMD:306] Island
|
||||
2 [CMD:305] Island
|
||||
1 [CMD:219] Prophetic Bolt
|
||||
1 [CMD:294] Vivid Creek
|
||||
1 [CMD:40] Brainstorm
|
||||
1 [CMD:250] Gruul Signet
|
||||
1 [CMD:293] Vivid Crag
|
||||
1 [CMD:252] Izzet Signet
|
||||
1 [CMD:175] Tribute to the Wild
|
||||
1 [CMD:295] Vivid Grove
|
||||
1 [CMD:177] Veteran Explorer
|
||||
1 [CMD:133] Rapacious One
|
||||
1 [CMD:253] Lightning Greaves
|
||||
1 [CMD:256] Prophetic Prism
|
||||
1 [CMD:135] Spitebellows
|
||||
1 [CMD:1] Artisan of Kozilek
|
||||
1 [CMD:178] Vow of Wildness
|
||||
1 [CMD:134] Ruination
|
||||
1 [CMD:214] Nucklavee
|
||||
1 [CMD:42] Conundrum Sphinx
|
||||
1 [CMD:138] Vow of Lightning
|
||||
1 [CMD:259] Simic Signet
|
||||
1 [CMD:39] Aethersnipe
|
||||
1 [CMD:290] Temple of the False God
|
||||
1 [CMD:160] Hunting Pack
|
||||
1 [CMD:280] Kazandu Refuge
|
||||
1 [CMD:162] Invigorate
|
||||
1 [CMD:161] Hydra Omnivore
|
||||
1 [CMD:164] Krosan Tusker
|
||||
1 [CMD:285] Rupture Spire
|
||||
1 [CMD:163] Kodama's Reach
|
||||
1 [CMD:166] Magus of the Vineyard
|
||||
1 [CMD:122] Faultgrinder
|
||||
1 [CMD:242] Armillary Sphere
|
||||
1 [CMD:288] Simic Growth Chamber
|
||||
1 [CMD:203] Hull Breach
|
||||
1 [CMD:128] Magmatic Force
|
||||
1 [CMD:204] Intet, the Dreamer
|
||||
1 [CMD:56] Ray of Command
|
||||
3 [CMD:318] Forest
|
||||
SB: 1 [CMD:220] Riku of Two Reflections
|
||||
LAYOUT MAIN:(1,10)(CMC,false,50)|([CMD:269],[CMD:272],[CMD:315],[CMD:315],[CMD:315],[CMD:315],[CMD:316],[CMD:316],[CMD:316],[CMD:317],[CMD:317],[CMD:317],[CMD:318],[CMD:318],[CMD:318],[CMD:274],[CMD:276],[CMD:277],[CMD:303],[CMD:303],[CMD:304],[CMD:304],[CMD:305],[CMD:305],[CMD:306],[CMD:278],[CMD:280],[CMD:311],[CMD:311],[CMD:312],[CMD:312],[CMD:313],[CMD:313],[CMD:314],[CMD:314],[CMD:285],[CMD:288],[CMD:290],[CMD:293],[CMD:294],[CMD:295])([CMD:40],[CMD:147],[CMD:166],[CMD:261],[CMD:177])([CMD:242],[CMD:190],[CMD:250],[CMD:203],[CMD:252],[CMD:253],[CMD:256],[CMD:222],[CMD:259],[CMD:175])([CMD:181],[CMD:148],[CMD:196],[CMD:197],[CMD:155],[CMD:199],[CMD:162],[CMD:163],[CMD:63],[CMD:68],[CMD:138],[CMD:178])([CMD:113],[CMD:42],[CMD:153],[CMD:198],[CMD:157],[CMD:56],[CMD:134])([CMD:219])([CMD:39],[CMD:143],[CMD:115],[CMD:150],[CMD:118],[CMD:151],[CMD:161],[CMD:204],[CMD:214],[CMD:133],[CMD:135],[CMD:232],[CMD:233])([CMD:188],[CMD:119],[CMD:122],[CMD:160],[CMD:164],[CMD:226])([CMD:110],[CMD:128],[CMD:65])([CMD:1])
|
||||
LAYOUT SIDEBOARD:(1,1)(NONE,false,50)|([CMD:220])
|
|
@ -30,7 +30,7 @@ NAME:Evasive Maneuvers
|
|||
1 [C13:263] Swiftfoot Boots
|
||||
1 [C13:316] Saltcrusted Steppe
|
||||
1 [C13:262] Surveyor's Scope
|
||||
1 [C13:176] AEthermage's Touch
|
||||
1 [C13:176] Aethermage's Touch
|
||||
1 [C13:137] Bane of Progress
|
||||
1 [C13:319] Secluded Steppe
|
||||
1 [C13:267] Thunderstaff
|
||||
|
|
|
@ -2,7 +2,7 @@ NAME:Peer Through Time
|
|||
1 [C14:12] Breaching Leviathan
|
||||
1 [C14:99] Brine Elemental
|
||||
1 [C14:55] Crown of Doom
|
||||
1 [C14:11] AEther Gale
|
||||
1 [C14:11] Aether Gale
|
||||
1 [C14:98] Azure Mage
|
||||
1 [C14:54] Commander's Sphere
|
||||
1 [C14:53] Assault Suit
|
||||
|
|
|
@ -64,7 +64,7 @@ NAME:Sworn to Darkness
|
|||
1 [C14:136] Black Sun's Zenith
|
||||
1 [C14:135] Bad Moon
|
||||
1 [C14:134] Annihilate
|
||||
1 [C14:133] AEther Snap
|
||||
1 [C14:133] Aether Snap
|
||||
1 [C14:298] Ghost Quarter
|
||||
1 [C14:132] Abyssal Persecutor
|
||||
1 [C14:250] Mind Stone
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
1 [C15:88] Blue Sun's Zenith
|
||||
1 [C15:87] Blatant Thievery
|
||||
1 [C15:42] Arjun, the Shifting Flame
|
||||
1 [C15:85] AEtherize
|
||||
1 [C15:85] Aetherize
|
||||
1 [C15:151] Dragon Mage
|
||||
1 [C15:153] Faithless Looting
|
||||
1 [C15:275] Worn Powerstone
|
||||
|
@ -65,7 +65,7 @@
|
|||
1 [C15:29] Mizzix's Mastery
|
||||
1 [C15:28] Meteor Blast
|
||||
1 [C15:256] Izzet Signet
|
||||
1 [C15:9] AEthersnatch
|
||||
1 [C15:9] Aethersnatch
|
||||
1 [C15:24] Awaken the Sky Tyrant
|
||||
1 [C15:214] Counterflux
|
||||
13 [C15:335] Mountain
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
1 [C16:10] Manifold Insights
|
||||
1 [C16:54] Crystalline Crawler
|
||||
1 [C16:293] Dreadship Reef
|
||||
1 [C16:173] Tuskguard Captain
|
||||
1 [C16:250] Darksteel Ingot
|
||||
1 [C16:294] Evolving Wilds
|
||||
1 [C16:295] Exotic Orchard
|
||||
1 [C16:210] Master Biomancer
|
||||
1 [C16:254] Fellwar Stone
|
||||
1 [C16:298] Golgari Rot Farm
|
||||
1 [C16:331] Temple of the False God
|
||||
1 [C16:211] Merciless Eviction
|
||||
1 [C16:255] Golgari Signet
|
||||
1 [C16:332] Terramorphic Expanse
|
||||
1 [C16:212] Mortify
|
||||
1 [C16:335] Underground River
|
||||
1 [C16:57] Abzan Falconer
|
||||
1 [C16:56] Ash Barrens
|
||||
1 [C16:9] Grip of Phyresis
|
||||
2 [C16:337] Plains
|
||||
1 [C16:338] Plains
|
||||
2 [C16:339] Plains
|
||||
1 [C16:99] Tezzeret's Gambit
|
||||
1 [C16:217] Putrefy
|
||||
1 [C16:7] Deepglow Skate
|
||||
1 [C16:5] Sublime Exhalation
|
||||
1 [C16:3] Orzhov Advokist
|
||||
1 [C16:1] Duelist's Heritage
|
||||
1 [C16:65] Elite Scaleguard
|
||||
1 [C16:63] Custodi Soulbinders
|
||||
1 [C16:281] Arcane Sanctum
|
||||
1 [C16:62] Citadel Siege
|
||||
1 [C16:282] Azorius Chancery
|
||||
1 [C16:61] Cathars' Crusade
|
||||
1 [C16:60] Brave the Sands
|
||||
1 [C16:286] Command Tower
|
||||
1 [C16:166] Scavenging Ooze
|
||||
1 [C16:243] Astral Cornucopia
|
||||
1 [C16:320] Sandsteppe Citadel
|
||||
1 [C16:200] Ghave, Guru of Spores
|
||||
1 [C16:27] Ancient Excavation
|
||||
1 [C16:168] Solidarity of Heroes
|
||||
1 [C16:289] Darkwater Catacombs
|
||||
1 [C16:322] Seaside Citadel
|
||||
1 [C16:246] Cauldron of Souls
|
||||
1 [C16:248] Commander's Sphere
|
||||
1 [C16:207] Juniper Order Ranger
|
||||
1 [C16:328] Sungrass Prairie
|
||||
1 [C16:190] Corpsejack Menace
|
||||
1 [C16:32] Ikra Shidiqi, the Usurper
|
||||
1 [C16:74] Reveillark
|
||||
1 [C16:270] Simic Signet
|
||||
1 [C16:150] Forgotten Ancient
|
||||
1 [C16:194] Duneblast
|
||||
1 [C16:272] Sol Ring
|
||||
1 [C16:152] Hardened Scales
|
||||
1 [C16:196] Enduring Scalelord
|
||||
1 [C16:153] Inspiring Call
|
||||
1 [C16:110] Festercreep
|
||||
1 [C16:154] Kalonian Hydra
|
||||
1 [C16:198] Fathom Mage
|
||||
1 [C16:38] Migratory Route
|
||||
1 [C16:234] Mirrorweave
|
||||
1 [C16:114] Languish
|
||||
1 [C16:312] Opal Palace
|
||||
1 [C16:115] Necroplasm
|
||||
1 [C16:236] Spitting Image
|
||||
1 [C16:313] Opulent Palace
|
||||
1 [C16:33] Ishai, Ojutai Dragonspeaker
|
||||
1 [C16:40] Reyhan, Last of the Abzan
|
||||
1 [C16:186] Bred for the Hunt
|
||||
1 [C16:340] Island
|
||||
2 [C16:341] Island
|
||||
1 [C16:342] Island
|
||||
1 [C16:100] Thrummingbird
|
||||
1 [C16:144] Champion of Lambholt
|
||||
1 [C16:101] Treasure Cruise
|
||||
1 [C16:266] Orzhov Signet
|
||||
2 [C16:343] Swamp
|
||||
1 [C16:344] Swamp
|
||||
2 [C16:345] Swamp
|
||||
1 [C16:106] Bane of the Living
|
||||
1 [C16:227] Vorel of the Hull Clade
|
||||
1 [C16:44] Sylvan Reclamation
|
||||
1 [C16:88] Disdainful Stroke
|
||||
1 [C16:228] Vulturous Zombie
|
||||
3 [C16:349] Forest
|
||||
2 [C16:350] Forest
|
||||
2 [C16:351] Forest
|
||||
1 [C16:308] Murmuring Bosk
|
||||
SB: 1 [C16:28] Atraxa, Praetors' Voice
|
|
@ -0,0 +1,92 @@
|
|||
1 [C16:97] Spelltwine
|
||||
1 [C16:291] Dismal Backwater
|
||||
1 [C16:52] Boompile
|
||||
1 [C16:294] Evolving Wilds
|
||||
1 [C16:295] Exotic Orchard
|
||||
1 [C16:131] Past in Flames
|
||||
1 [C16:175] Wall of Blossoms
|
||||
1 [C16:91] Evacuation
|
||||
1 [C16:132] Reforge the Soul
|
||||
1 [C16:18] Frenzied Fugue
|
||||
1 [C16:297] Frontier Bivouac
|
||||
1 [C16:330] Swiftwater Cliffs
|
||||
1 [C16:254] Fellwar Stone
|
||||
1 [C16:332] Terramorphic Expanse
|
||||
1 [C16:15] Parting Thoughts
|
||||
1 [C16:333] Thornwood Falls
|
||||
1 [C16:213] Nath of the Gilt-Leaf
|
||||
1 [C16:137] Volcanic Vision
|
||||
1 [C16:13] Curtains' Call
|
||||
1 [C16:138] Wheel of Fate
|
||||
1 [C16:56] Ash Barrens
|
||||
1 [C16:11] Cruel Entertainment
|
||||
1 [C16:139] Whims of the Fates
|
||||
1 [C16:218] Rakdos Charm
|
||||
1 [C16:19] Goblin Spymaster
|
||||
1 [C16:20] Runehorn Hellkite
|
||||
1 [C16:280] Whispersilk Cloak
|
||||
1 [C16:165] Satyr Wayfinder
|
||||
1 [C16:286] Command Tower
|
||||
1 [C16:122] Chaos Warp
|
||||
1 [C16:287] Crumbling Necropolis
|
||||
1 [C16:27] Ancient Excavation
|
||||
1 [C16:321] Savage Lands
|
||||
1 [C16:124] Dragon Mage
|
||||
1 [C16:201] Glint-Eye Nephilim
|
||||
1 [C16:247] Chromatic Lantern
|
||||
1 [C16:204] Horizon Chimera
|
||||
1 [C16:248] Commander's Sphere
|
||||
1 [C16:325] Shadowblood Ridge
|
||||
1 [C16:326] Simic Growth Chamber
|
||||
1 [C16:31] Grave Upheaval
|
||||
1 [C16:193] Decimate
|
||||
1 [C16:270] Simic Signet
|
||||
1 [C16:151] Gamekeeper
|
||||
1 [C16:272] Sol Ring
|
||||
1 [C16:197] Etherium-Horn Sorcerer
|
||||
1 [C16:111] Ghastly Conscription
|
||||
1 [C16:112] Guiltfeeder
|
||||
1 [C16:113] In Garruk's Wake
|
||||
1 [C16:313] Opulent Palace
|
||||
1 [C16:35] Kydele, Chosen of Kruphix
|
||||
1 [C16:116] Sangromancer
|
||||
1 [C16:117] Waste Not
|
||||
1 [C16:238] Worm Harvest
|
||||
1 [C16:315] Rakdos Carnarium
|
||||
1 [C16:316] Reliquary Tower
|
||||
1 [C16:318] Rugged Highlands
|
||||
1 [C16:319] Rupture Spire
|
||||
1 [C16:87] Devastation Tide
|
||||
1 [C16:182] Bituminous Blast
|
||||
1 [C16:84] Chain of Vapor
|
||||
1 [C16:183] Blood Tyrant
|
||||
1 [C16:184] Bloodbraid Elf
|
||||
1 [C16:82] Aeon Chronicler
|
||||
1 [C16:81] Academy Elite
|
||||
2 [C16:340] Island
|
||||
2 [C16:341] Island
|
||||
1 [C16:342] Island
|
||||
1 [C16:143] Burgeoning
|
||||
1 [C16:188] Coiling Oracle
|
||||
1 [C16:101] Treasure Cruise
|
||||
1 [C16:189] Consuming Aberration
|
||||
1 [C16:222] Spellheart Chimera
|
||||
1 [C16:49] Vial Smasher the Fierce
|
||||
2 [C16:343] Swamp
|
||||
2 [C16:344] Swamp
|
||||
1 [C16:345] Swamp
|
||||
1 [C16:268] Rakdos Signet
|
||||
1 [C16:47] Treacherous Terrain
|
||||
1 [C16:104] Windfall
|
||||
1 [C16:148] Far Wanderings
|
||||
1 [C16:46] Thrasios, Triton Hero
|
||||
1 [C16:346] Mountain
|
||||
2 [C16:347] Mountain
|
||||
1 [C16:348] Mountain
|
||||
1 [C16:105] Army of the Damned
|
||||
1 [C16:303] Jungle Hollow
|
||||
2 [C16:349] Forest
|
||||
2 [C16:350] Forest
|
||||
1 [C16:351] Forest
|
||||
1 [C16:229] Whispering Madness
|
||||
SB: 1 [C16:50] Yidris, Maelstrom Wielder
|
|
@ -0,0 +1,94 @@
|
|||
1 [C16:290] Dimir Aqueduct
|
||||
1 [C16:51] Armory Automaton
|
||||
1 [C16:95] Read the Runes
|
||||
1 [C16:294] Evolving Wilds
|
||||
1 [C16:295] Exotic Orchard
|
||||
1 [C16:92] Master of Etherium
|
||||
1 [C16:252] Etched Oracle
|
||||
1 [C16:253] Everflowing Chalice
|
||||
1 [C16:254] Fellwar Stone
|
||||
1 [C16:133] Slobad, Goblin Tinkerer
|
||||
1 [C16:331] Temple of the False God
|
||||
1 [C16:332] Terramorphic Expanse
|
||||
1 [C16:15] Parting Thoughts
|
||||
1 [C16:14] Magus of the Will
|
||||
1 [C16:334] Transguild Promenade
|
||||
1 [C16:136] Trash for Treasure
|
||||
1 [C16:258] Ichor Wellspring
|
||||
1 [C16:56] Ash Barrens
|
||||
1 [C16:12] Curse of Vengeance
|
||||
1 [C16:9] Grip of Phyresis
|
||||
1 [C16:8] Faerie Artisans
|
||||
1 [C16:337] Plains
|
||||
2 [C16:338] Plains
|
||||
2 [C16:339] Plains
|
||||
1 [C16:6] Coastal Breach
|
||||
1 [C16:64] Dispeller's Capsule
|
||||
1 [C16:281] Arcane Sanctum
|
||||
1 [C16:282] Azorius Chancery
|
||||
1 [C16:283] Boros Garrison
|
||||
1 [C16:284] Buried Ruin
|
||||
1 [C16:286] Command Tower
|
||||
1 [C16:287] Crumbling Necropolis
|
||||
1 [C16:27] Ancient Excavation
|
||||
1 [C16:244] Blinkmoth Urn
|
||||
1 [C16:123] Daretti, Scrap Savant
|
||||
1 [C16:288] Darksteel Citadel
|
||||
1 [C16:26] Akiri, Line-Slinger
|
||||
1 [C16:245] Bonehoard
|
||||
1 [C16:125] Godo, Bandit Warlord
|
||||
1 [C16:323] Seat of the Synod
|
||||
1 [C16:203] Hanna, Ship's Navigator
|
||||
1 [C16:248] Commander's Sphere
|
||||
1 [C16:127] Hellkite Igniter
|
||||
1 [C16:249] Cranial Plating
|
||||
1 [C16:128] Hellkite Tyrant
|
||||
1 [C16:206] Jor Kadeen, the Prevailer
|
||||
1 [C16:76] Sanctum Gargoyle
|
||||
1 [C16:31] Grave Upheaval
|
||||
1 [C16:30] Bruse Tarl, Boorish Herder
|
||||
1 [C16:73] Phyrexian Rebirth
|
||||
1 [C16:72] Open the Vaults
|
||||
1 [C16:271] Skullclamp
|
||||
1 [C16:272] Sol Ring
|
||||
1 [C16:273] Solemn Simulacrum
|
||||
1 [C16:274] Soul of New Phyrexia
|
||||
1 [C16:199] Filigree Angel
|
||||
1 [C16:276] Swiftfoot Boots
|
||||
1 [C16:38] Migratory Route
|
||||
1 [C16:310] Mystic Monastery
|
||||
1 [C16:311] Nomad Outpost
|
||||
1 [C16:278] Trading Post
|
||||
1 [C16:237] Thopter Foundry
|
||||
1 [C16:315] Rakdos Carnarium
|
||||
1 [C16:239] Trial // Error
|
||||
1 [C16:319] Rupture Spire
|
||||
1 [C16:43] Silas Renn, Seeker Adept
|
||||
1 [C16:86] Chief Engineer
|
||||
1 [C16:181] Baleful Strix
|
||||
1 [C16:261] Loxodon Warhammer
|
||||
1 [C16:140] Whipflare
|
||||
1 [C16:262] Mycosynth Wellspring
|
||||
1 [C16:263] Myr Battlesphere
|
||||
2 [C16:340] Island
|
||||
1 [C16:341] Island
|
||||
2 [C16:342] Island
|
||||
1 [C16:264] Myr Retriever
|
||||
1 [C16:221] Sharuum the Hegemon
|
||||
1 [C16:265] Nevinyrral's Disk
|
||||
1 [C16:343] Swamp
|
||||
2 [C16:344] Swamp
|
||||
1 [C16:345] Swamp
|
||||
1 [C16:223] Sphinx Summoner
|
||||
1 [C16:102] Trinket Mage
|
||||
1 [C16:224] Sydri, Galvanic Genius
|
||||
1 [C16:103] Vedalken Engineer
|
||||
1 [C16:269] Shimmer Myr
|
||||
2 [C16:346] Mountain
|
||||
1 [C16:347] Mountain
|
||||
1 [C16:348] Mountain
|
||||
1 [C16:89] Etherium Sculptor
|
||||
1 [C16:107] Beacon of Unrest
|
||||
1 [C16:109] Executioner's Capsule
|
||||
1 [C16:90] Ethersworn Adjudicator
|
||||
SB: 1 [C16:29] Breya, Etherium Shaper
|
|
@ -0,0 +1,96 @@
|
|||
1 [C16:53] Conqueror's Flail
|
||||
1 [C16:292] Dragonskull Summit
|
||||
1 [C16:171] Thelonite Hermit
|
||||
1 [C16:172] Thunderfoot Baloth
|
||||
1 [C16:294] Evolving Wilds
|
||||
1 [C16:295] Exotic Orchard
|
||||
1 [C16:18] Frenzied Fugue
|
||||
1 [C16:176] Wild Beastmaster
|
||||
1 [C16:254] Fellwar Stone
|
||||
1 [C16:177] Abzan Charm
|
||||
1 [C16:17] Divergent Transformations
|
||||
1 [C16:16] Charging Cinderhorn
|
||||
1 [C16:299] Grand Coliseum
|
||||
1 [C16:134] Stalking Vengeance
|
||||
1 [C16:332] Terramorphic Expanse
|
||||
1 [C16:178] Ankle Shanker
|
||||
1 [C16:256] Gruul Signet
|
||||
1 [C16:135] Taurean Mauler
|
||||
1 [C16:59] Blind Obedience
|
||||
1 [C16:179] Artifact Mutation
|
||||
1 [C16:214] Naya Charm
|
||||
1 [C16:215] Necrogenesis
|
||||
1 [C16:336] Windbrisk Heights
|
||||
1 [C16:56] Ash Barrens
|
||||
1 [C16:337] Plains
|
||||
1 [C16:338] Plains
|
||||
1 [C16:339] Plains
|
||||
1 [C16:160] Quirion Explorer
|
||||
1 [C16:161] Rampant Growth
|
||||
1 [C16:240] Order // Chaos
|
||||
1 [C16:164] Sakura-Tribe Elder
|
||||
1 [C16:285] Caves of Koilos
|
||||
1 [C16:286] Command Tower
|
||||
1 [C16:121] Breath of Fury
|
||||
1 [C16:320] Sandsteppe Citadel
|
||||
1 [C16:321] Savage Lands
|
||||
1 [C16:167] Shamanic Revelation
|
||||
1 [C16:69] Mentor of the Meek
|
||||
1 [C16:25] Stonehoof Chieftain
|
||||
1 [C16:169] Sylvok Explorer
|
||||
1 [C16:126] Grab the Reins
|
||||
1 [C16:248] Commander's Sphere
|
||||
1 [C16:23] Primeval Protector
|
||||
1 [C16:22] Evolutionary Escalation
|
||||
1 [C16:205] Iroas, God of Victory
|
||||
1 [C16:327] Spinerock Knoll
|
||||
1 [C16:208] Korozda Guildmage
|
||||
1 [C16:329] Sunpetal Grove
|
||||
1 [C16:209] Lavalanche
|
||||
1 [C16:191] Crackling Doom
|
||||
1 [C16:31] Grave Upheaval
|
||||
1 [C16:192] Dauntless Escort
|
||||
1 [C16:271] Skullclamp
|
||||
1 [C16:272] Sol Ring
|
||||
1 [C16:70] Mirror Entity
|
||||
1 [C16:230] Wilderness Elemental
|
||||
1 [C16:275] Sunforger
|
||||
1 [C16:39] Ravos, Soultender
|
||||
1 [C16:232] Zhur-Taa Druid
|
||||
1 [C16:233] Everlasting Torment
|
||||
1 [C16:157] Managorger Hydra
|
||||
1 [C16:311] Nomad Outpost
|
||||
1 [C16:158] Mycoloth
|
||||
1 [C16:235] Selesnya Guildmage
|
||||
1 [C16:314] Orzhov Basilica
|
||||
1 [C16:118] Wight of Precinct Six
|
||||
1 [C16:317] Rootbound Crag
|
||||
1 [C16:119] Alesha, Who Smiles at Death
|
||||
1 [C16:180] Aura Mutation
|
||||
1 [C16:260] Lightning Greaves
|
||||
1 [C16:185] Boros Charm
|
||||
1 [C16:142] Beastmaster Ascension
|
||||
1 [C16:187] Clan Defiance
|
||||
1 [C16:343] Swamp
|
||||
1 [C16:344] Swamp
|
||||
1 [C16:345] Swamp
|
||||
1 [C16:300] Gruul Turf
|
||||
1 [C16:48] Tymna the Weaver
|
||||
1 [C16:147] Den Protector
|
||||
1 [C16:47] Treacherous Terrain
|
||||
2 [C16:346] Mountain
|
||||
1 [C16:347] Mountain
|
||||
2 [C16:348] Mountain
|
||||
1 [C16:225] Terminate
|
||||
1 [C16:45] Tana, the Bloodsower
|
||||
1 [C16:149] Farseek
|
||||
1 [C16:226] Utter End
|
||||
1 [C16:304] Jungle Shrine
|
||||
1 [C16:44] Sylvan Reclamation
|
||||
1 [C16:305] Karplusan Forest
|
||||
2 [C16:349] Forest
|
||||
1 [C16:350] Forest
|
||||
2 [C16:351] Forest
|
||||
1 [C16:108] Brutal Hordechief
|
||||
1 [C16:307] Mosswort Bridge
|
||||
SB: 1 [C16:41] Saskia the Unyielding
|
|
@ -0,0 +1,92 @@
|
|||
1 [C16:98] Swan Song
|
||||
1 [C16:96] Reins of Power
|
||||
1 [C16:170] Tempt with Discovery
|
||||
1 [C16:94] Propaganda
|
||||
1 [C16:294] Evolving Wilds
|
||||
1 [C16:93] Minds Aglow
|
||||
1 [C16:251] Empyrial Plate
|
||||
1 [C16:295] Exotic Orchard
|
||||
1 [C16:174] Veteran Explorer
|
||||
1 [C16:130] Kazuul, Tyrant of the Cliffs
|
||||
1 [C16:296] Forbidden Orchard
|
||||
1 [C16:297] Frontier Bivouac
|
||||
1 [C16:332] Terramorphic Expanse
|
||||
1 [C16:58] Blazing Archon
|
||||
1 [C16:257] Howling Mine
|
||||
1 [C16:334] Transguild Promenade
|
||||
1 [C16:56] Ash Barrens
|
||||
1 [C16:259] Keening Stone
|
||||
1 [C16:55] Prismatic Geoscope
|
||||
1 [C16:216] Progenitor Mimic
|
||||
2 [C16:337] Plains
|
||||
2 [C16:338] Plains
|
||||
1 [C16:339] Plains
|
||||
1 [C16:219] Rubblehulk
|
||||
1 [C16:4] Selfless Squire
|
||||
1 [C16:3] Orzhov Advokist
|
||||
1 [C16:2] Entrapment Maneuver
|
||||
1 [C16:21] Benefactor's Draught
|
||||
1 [C16:282] Azorius Chancery
|
||||
1 [C16:162] Realm Seekers
|
||||
1 [C16:163] Rites of Flourishing
|
||||
1 [C16:241] Akroan Horse
|
||||
1 [C16:120] Blasphemous Act
|
||||
1 [C16:242] Assault Suit
|
||||
1 [C16:286] Command Tower
|
||||
1 [C16:322] Seaside Citadel
|
||||
1 [C16:202] Gwafa Hazid, Profiteer
|
||||
1 [C16:68] Hushwing Gryff
|
||||
1 [C16:24] Seeds of Renewal
|
||||
1 [C16:324] Selesnya Sanctuary
|
||||
1 [C16:248] Commander's Sphere
|
||||
1 [C16:67] Hoofprints of the Stag
|
||||
1 [C16:204] Horizon Chimera
|
||||
1 [C16:22] Evolutionary Escalation
|
||||
1 [C16:66] Ghostly Prison
|
||||
1 [C16:129] Humble Defector
|
||||
1 [C16:75] Reverse the Sands
|
||||
1 [C16:195] Edric, Spymaster of Trest
|
||||
1 [C16:71] Oblation
|
||||
1 [C16:272] Sol Ring
|
||||
1 [C16:231] Zedruu the Greathearted
|
||||
1 [C16:155] Kodama's Reach
|
||||
1 [C16:156] Lurking Predators
|
||||
1 [C16:38] Migratory Route
|
||||
1 [C16:310] Mystic Monastery
|
||||
1 [C16:277] Temple Bell
|
||||
1 [C16:37] Ludevic, Necro-Alchemist
|
||||
1 [C16:312] Opal Palace
|
||||
1 [C16:279] Venser's Journal
|
||||
1 [C16:159] Oath of Druids
|
||||
1 [C16:79] Wave of Reckoning
|
||||
1 [C16:34] Kraum, Ludevic's Opus
|
||||
1 [C16:78] Swords to Plowshares
|
||||
1 [C16:77] Sphere of Safety
|
||||
1 [C16:319] Rupture Spire
|
||||
1 [C16:42] Sidar Kondo of Jamuraa
|
||||
1 [C16:85] Chasm Skulker
|
||||
1 [C16:83] Arcane Denial
|
||||
1 [C16:141] Beast Within
|
||||
1 [C16:80] Windborn Muse
|
||||
2 [C16:340] Island
|
||||
1 [C16:341] Island
|
||||
2 [C16:342] Island
|
||||
1 [C16:220] Selvala, Explorer Returned
|
||||
1 [C16:145] Collective Voyage
|
||||
1 [C16:146] Cultivate
|
||||
1 [C16:300] Gruul Turf
|
||||
1 [C16:267] Psychosis Crawler
|
||||
1 [C16:301] Homeward Path
|
||||
1 [C16:47] Treacherous Terrain
|
||||
1 [C16:302] Izzet Boilerworks
|
||||
1 [C16:346] Mountain
|
||||
2 [C16:347] Mountain
|
||||
2 [C16:348] Mountain
|
||||
1 [C16:304] Jungle Shrine
|
||||
1 [C16:44] Sylvan Reclamation
|
||||
1 [C16:349] Forest
|
||||
2 [C16:350] Forest
|
||||
2 [C16:351] Forest
|
||||
1 [C16:306] Krosan Verge
|
||||
1 [C16:309] Myriad Landscape
|
||||
SB: 1 [C16:36] Kynaios and Tiro of Meletis
|
|
@ -0,0 +1,89 @@
|
|||
1 [C17:106] Corpse Augur
|
||||
1 [C17:10] Galecaster Colossus
|
||||
1 [C17:111] Decree of Pain
|
||||
1 [C17:114] Go for the Throat
|
||||
1 [C17:115] Magus of the Abyss
|
||||
1 [C17:117] Necromantic Selection
|
||||
1 [C17:121] Puppeteer Clique
|
||||
1 [C17:12] Magus of the Mind
|
||||
1 [C17:131] Chaos Warp
|
||||
1 [C17:132] Comet Storm
|
||||
1 [C17:13] Portal Mage
|
||||
1 [C17:14] Bloodline Necromancer
|
||||
1 [C17:166] Cauldron Dance
|
||||
1 [C17:169] Crosis's Charm
|
||||
1 [C17:16] Curse of Disturbance
|
||||
1 [C17:171] Etherium-Horn Sorcerer
|
||||
1 [C17:173] Havengul Lich
|
||||
1 [C17:175] Izzet Chronarch
|
||||
1 [C17:177] Marchesa, the Black Rose
|
||||
1 [C17:178] Memory Plunder
|
||||
1 [C17:180] Mercurial Chemister
|
||||
1 [C17:183] Nin, the Pain Artist
|
||||
1 [C17:185] Niv-Mizzet, the Firemind
|
||||
1 [C17:186] Nivix Guildmage
|
||||
1 [C17:18] Kindred Dominance
|
||||
1 [C17:190] Rakdos Charm
|
||||
1 [C17:193] Shadowmage Infiltrator
|
||||
1 [C17:195] Silumgar's Command
|
||||
1 [C17:199] Terminate
|
||||
1 [C17:201] Vela the Night-Clad
|
||||
1 [C17:206] Commander's Sphere
|
||||
1 [C17:207] Darksteel Ingot
|
||||
1 [C17:210] Fellwar Stone
|
||||
1 [C17:217] Nevinyrral's Disk
|
||||
1 [C17:21] Vindictive Lich
|
||||
1 [C17:223] Sol Ring
|
||||
1 [C17:229] Unstable Obelisk
|
||||
1 [C17:232] Worn Powerstone
|
||||
1 [C17:242] Command Tower
|
||||
1 [C17:244] Crumbling Necropolis
|
||||
1 [C17:245] Dimir Aqueduct
|
||||
1 [C17:246] Dismal Backwater
|
||||
1 [C17:248] Evolving Wilds
|
||||
1 [C17:249] Exotic Orchard
|
||||
1 [C17:24] Curse of Opulence
|
||||
1 [C17:254] Grixis Panorama
|
||||
1 [C17:256] Izzet Boilerworks
|
||||
1 [C17:258] Jwar Isle Refuge
|
||||
1 [C17:264] Mystifying Maze
|
||||
1 [C17:26] Izzet Chemister
|
||||
1 [C17:270] Rakdos Carnarium
|
||||
1 [C17:283] Swiftwater Cliffs
|
||||
1 [C17:284] Temple of the False God
|
||||
1 [C17:285] Terramorphic Expanse
|
||||
1 [C17:289] Vivid Crag
|
||||
1 [C17:28] Shifting Shadow
|
||||
1 [C17:290] Vivid Creek
|
||||
1 [C17:292] Vivid Marsh
|
||||
1 [C17:305] Mountain
|
||||
1 [C17:306] Mountain
|
||||
1 [C17:39] Kess, Dissident Mage
|
||||
1 [C17:41] Mairsil, the Pretender
|
||||
1 [C17:47] Taigam, Sidisi's Hand
|
||||
1 [C17:54] Mirror of the Forebears
|
||||
1 [C17:56] Path of Ancestry
|
||||
1 [C17:80] Arcanis the Omnipotent
|
||||
1 [C17:81] Archaeomancer
|
||||
1 [C17:82] Azami, Lady of Scrolls
|
||||
1 [C17:83] Body Double
|
||||
1 [C17:84] Clone Legion
|
||||
1 [C17:85] Harbinger of the Tides
|
||||
1 [C17:86] Into the Roil
|
||||
1 [C17:87] Merchant of Secrets
|
||||
1 [C17:89] Opportunity
|
||||
1 [C17:90] Polymorphist's Jest
|
||||
1 [C17:91] Reality Shift
|
||||
1 [C17:92] Sea Gate Oracle
|
||||
1 [C17:93] Serendib Sorcerer
|
||||
1 [C17:94] Spelltwine
|
||||
1 [C17:97] Apprentice Necromancer
|
||||
1 [C17:9] Curse of Verbosity
|
||||
2 [C17:301] Swamp
|
||||
2 [C17:302] Swamp
|
||||
2 [C17:303] Swamp
|
||||
2 [C17:304] Mountain
|
||||
3 [C17:298] Island
|
||||
3 [C17:300] Island
|
||||
4 [C17:299] Island
|
||||
SB: 1 [C17:38] Inalla, Archmage Ritualist
|
|
@ -0,0 +1,97 @@
|
|||
1 [C17:234] Arcane Sanctum
|
||||
1 [C17:203] Armillary Sphere
|
||||
1 [C17:161] Atarka, World Render
|
||||
1 [C17:163] Bladewing the Risen
|
||||
1 [C17:15] Boneyard Scourge
|
||||
1 [C17:165] Broodmate Dragon
|
||||
1 [C17:242] Command Tower
|
||||
1 [C17:206] Commander's Sphere
|
||||
1 [C17:168] Crosis, the Purger
|
||||
1 [C17:133] Crucible of Fire
|
||||
1 [C17:243] Crucible of the Spirit Dragon
|
||||
1 [C17:244] Crumbling Necropolis
|
||||
1 [C17:107] Crux of Fate
|
||||
1 [C17:147] Cultivate
|
||||
1 [C17:30] Curse of Bounty
|
||||
1 [C17:24] Curse of Opulence
|
||||
1 [C17:9] Curse of Verbosity
|
||||
1 [C17:207] Darksteel Ingot
|
||||
1 [C17:110] Deathbringer Regent
|
||||
1 [C17:134] Dragon Tempest
|
||||
1 [C17:135] Dragonlord's Servant
|
||||
1 [C17:136] Dragonspeaker Shaman
|
||||
1 [C17:209] Dreamstone Hedron
|
||||
1 [C17:170] Dromoka, the Eternal
|
||||
1 [C17:137] Earthquake
|
||||
1 [C17:148] Elemental Bond
|
||||
1 [C17:149] Farseek
|
||||
1 [C17:211] Fist of Suns
|
||||
1 [C17:307] Forest
|
||||
1 [C17:308] Forest
|
||||
1 [C17:309] Forest
|
||||
1 [C17:4] Fortunate Few
|
||||
1 [C17:37] Fractured Identity
|
||||
1 [C17:251] Frontier Bivouac
|
||||
1 [C17:150] Frontier Siege
|
||||
1 [C17:255] Haven of the Spirit Dragon
|
||||
1 [C17:138] Hellkite Charger
|
||||
1 [C17:53] Herald's Horn
|
||||
1 [C17:174] Intet, the Dreamer
|
||||
1 [C17:298] Island
|
||||
1 [C17:299] Island
|
||||
1 [C17:300] Island
|
||||
1 [C17:257] Jungle Shrine
|
||||
1 [C17:11] Kindred Discovery
|
||||
1 [C17:154] Kodama's Reach
|
||||
1 [C17:176] Kolaghan, the Storm's Fury
|
||||
1 [C17:215] Lightning Greaves
|
||||
1 [C17:54] Mirror of the Forebears
|
||||
1 [C17:88] Monastery Siege
|
||||
1 [C17:263] Mystic Monastery
|
||||
1 [C17:218] Nihil Spellbomb
|
||||
1 [C17:184] Niv-Mizzet, Dracogenius
|
||||
1 [C17:265] Nomad Outpost
|
||||
1 [C17:45] O-Kagachi, Vengeful Kami
|
||||
1 [C17:187] Ojutai, Soul of Winter
|
||||
1 [C17:267] Opulent Palace
|
||||
1 [C17:67] Orator of Ojutai
|
||||
1 [C17:118] Painful Truths
|
||||
1 [C17:119] Palace Siege
|
||||
1 [C17:56] Path of Ancestry
|
||||
1 [C17:295] Plains
|
||||
1 [C17:296] Plains
|
||||
1 [C17:297] Plains
|
||||
1 [C17:156] Rain of Thorns
|
||||
1 [C17:55] Ramos, Dragon Engine
|
||||
1 [C17:141] Ryusei, the Falling Star
|
||||
1 [C17:274] Sandsteppe Citadel
|
||||
1 [C17:275] Savage Lands
|
||||
1 [C17:191] Savage Ventmaw
|
||||
1 [C17:6] Scalelord Reckoner
|
||||
1 [C17:192] Scion of the Ur-Dragon
|
||||
1 [C17:142] Scourge of Valkas
|
||||
1 [C17:277] Seaside Citadel
|
||||
1 [C17:194] Silumgar, the Drifting Death
|
||||
1 [C17:223] Sol Ring
|
||||
1 [C17:196] Spellbound Dragon
|
||||
1 [C17:225] Steel Hellkite
|
||||
1 [C17:74] Sunscorch Regent
|
||||
1 [C17:301] Swamp
|
||||
1 [C17:302] Swamp
|
||||
1 [C17:303] Swamp
|
||||
1 [C17:46] Taigam, Ojutai Master
|
||||
1 [C17:198] Teneb, the Harvester
|
||||
1 [C17:29] Territorial Hellkite
|
||||
1 [C17:143] Tyrant's Familiar
|
||||
1 [C17:144] Utvara Hellkite
|
||||
1 [C17:289] Vivid Crag
|
||||
1 [C17:290] Vivid Creek
|
||||
1 [C17:291] Vivid Grove
|
||||
1 [C17:292] Vivid Marsh
|
||||
1 [C17:293] Vivid Meadow
|
||||
1 [C17:49] Wasitora, Nekoru Queen
|
||||
1 [C17:230] Wayfarer's Bauble
|
||||
2 [C17:304] Mountain
|
||||
2 [C17:305] Mountain
|
||||
2 [C17:306] Mountain
|
||||
SB: 1 [C17:48] The Ur-Dragon
|
|
@ -0,0 +1,92 @@
|
|||
1 [C17:145] Abundance
|
||||
1 [C17:1] Alms Collector
|
||||
1 [C17:202] Argentum Armor
|
||||
1 [C17:2] Balan, Wandering Knight
|
||||
1 [C17:162] Behemoth Sledge
|
||||
1 [C17:235] Blighted Woodland
|
||||
1 [C17:50] Bloodforged Battle-Axe
|
||||
1 [C17:237] Blossoming Sands
|
||||
1 [C17:242] Command Tower
|
||||
1 [C17:58] Condemn
|
||||
1 [C17:146] Crushing Vines
|
||||
1 [C17:147] Cultivate
|
||||
1 [C17:30] Curse of Bounty
|
||||
1 [C17:3] Curse of Vitality
|
||||
1 [C17:59] Divine Reckoning
|
||||
1 [C17:209] Dreamstone Hedron
|
||||
1 [C17:247] Elfhame Palace
|
||||
1 [C17:248] Evolving Wilds
|
||||
1 [C17:172] Fleecemane Lion
|
||||
1 [C17:212] Grappling Hook
|
||||
1 [C17:252] Grasslands
|
||||
1 [C17:253] Graypelt Refuge
|
||||
1 [C17:51] Hammer of Nazahn
|
||||
1 [C17:151] Harmonize
|
||||
1 [C17:213] Hedron Archive
|
||||
1 [C17:52] Heirloom Blade
|
||||
1 [C17:53] Herald's Horn
|
||||
1 [C17:214] Hero's Blade
|
||||
1 [C17:31] Hungry Lynx
|
||||
1 [C17:152] Hunter's Prowess
|
||||
1 [C17:61] Jareth, Leonine Titan
|
||||
1 [C17:62] Jazal Goldmane
|
||||
1 [C17:153] Jedit Ojanen of Efrava
|
||||
1 [C17:63] Kemba, Kha Regent
|
||||
1 [C17:32] Kindred Summons
|
||||
1 [C17:260] Krosan Verge
|
||||
1 [C17:64] Leonin Arbiter
|
||||
1 [C17:65] Leonin Relic-Warder
|
||||
1 [C17:66] Leonin Shikari
|
||||
1 [C17:215] Lightning Greaves
|
||||
1 [C17:216] Loxodon Warhammer
|
||||
1 [C17:181] Mirari's Wake
|
||||
1 [C17:43] Mirri, Weatherlight Duelist
|
||||
1 [C17:261] Mosswort Bridge
|
||||
1 [C17:262] Myriad Landscape
|
||||
1 [C17:44] Nazahn, Revered Bladesmith
|
||||
1 [C17:155] Nissa's Pilgrimage
|
||||
1 [C17:266] Opal Palace
|
||||
1 [C17:68] Oreskos Explorer
|
||||
1 [C17:56] Path of Ancestry
|
||||
1 [C17:188] Phantom Nishoba
|
||||
1 [C17:189] Qasali Pridemage
|
||||
1 [C17:33] Qasali Slingers
|
||||
1 [C17:220] Quietus Spike
|
||||
1 [C17:69] Raksha Golden Cub
|
||||
1 [C17:157] Relic Crush
|
||||
1 [C17:272] Rogue's Passage
|
||||
1 [C17:71] Rout
|
||||
1 [C17:273] Saltcrusted Steppe
|
||||
1 [C17:278] Secluded Steppe
|
||||
1 [C17:72] Seht's Tiger
|
||||
1 [C17:279] Selesnya Guildgate
|
||||
1 [C17:280] Selesnya Sanctuary
|
||||
1 [C17:222] Skullclamp
|
||||
1 [C17:223] Sol Ring
|
||||
1 [C17:158] Soul's Majesty
|
||||
1 [C17:73] Spirit of the Hearth
|
||||
1 [C17:224] Staff of Nin
|
||||
1 [C17:281] Stirring Wildwood
|
||||
1 [C17:75] Sunspear Shikari
|
||||
1 [C17:226] Swiftfoot Boots
|
||||
1 [C17:228] Sword of Vengeance
|
||||
1 [C17:227] Sword of the Animist
|
||||
1 [C17:77] Taj-Nar Swordsmith
|
||||
1 [C17:284] Temple of the False God
|
||||
1 [C17:159] Temur Sabertooth
|
||||
1 [C17:285] Terramorphic Expanse
|
||||
1 [C17:286] Tranquil Expanse
|
||||
1 [C17:287] Tranquil Thicket
|
||||
1 [C17:34] Traverse the Outlands
|
||||
1 [C17:291] Vivid Grove
|
||||
1 [C17:293] Vivid Meadow
|
||||
1 [C17:78] White Sun's Zenith
|
||||
1 [C17:79] Wing Shards
|
||||
1 [C17:160] Zendikar Resurgent
|
||||
2 [C17:307] Forest
|
||||
2 [C17:308] Forest
|
||||
2 [C17:309] Forest
|
||||
2 [C17:295] Plains
|
||||
2 [C17:296] Plains
|
||||
3 [C17:297] Plains
|
||||
SB: 1 [C17:35] Arahbo, Roar of the World
|
|
@ -0,0 +1,94 @@
|
|||
1 [C17:100] Blood Tribute
|
||||
1 [C17:101] Bloodhusk Ritualist
|
||||
1 [C17:102] Bloodlord of Vaasgoth
|
||||
1 [C17:103] Butcher of Malakir
|
||||
1 [C17:104] Captivating Vampire
|
||||
1 [C17:105] Consuming Vapors
|
||||
1 [C17:108] Damnable Pact
|
||||
1 [C17:112] Drana, Kalastria Bloodchief
|
||||
1 [C17:113] Falkenrath Noble
|
||||
1 [C17:114] Go for the Throat
|
||||
1 [C17:116] Malakir Bloodwitch
|
||||
1 [C17:120] Pawn of Ulamog
|
||||
1 [C17:122] Read the Bones
|
||||
1 [C17:123] Sangromancer
|
||||
1 [C17:124] Sanguine Bond
|
||||
1 [C17:125] Skeletal Scrying
|
||||
1 [C17:126] Skeletal Vampire
|
||||
1 [C17:127] Syphon Mind
|
||||
1 [C17:128] Underworld Connections
|
||||
1 [C17:129] Vampire Nighthawk
|
||||
1 [C17:130] Vein Drinker
|
||||
1 [C17:139] Outpost Siege
|
||||
1 [C17:140] Rakish Heir
|
||||
1 [C17:14] Bloodline Necromancer
|
||||
1 [C17:164] Blood Baron of Vizkopa
|
||||
1 [C17:167] Crackling Doom
|
||||
1 [C17:16] Curse of Disturbance
|
||||
1 [C17:179] Merciless Eviction
|
||||
1 [C17:17] Kheru Mind-Eater
|
||||
1 [C17:182] Mortify
|
||||
1 [C17:197] Stromkirk Captain
|
||||
1 [C17:200] Tithe Drinker
|
||||
1 [C17:204] Blade of the Bloodchief
|
||||
1 [C17:205] Boros Signet
|
||||
1 [C17:207] Darksteel Ingot
|
||||
1 [C17:208] Door of Destinies
|
||||
1 [C17:20] Patron of the Vein
|
||||
1 [C17:218] Nihil Spellbomb
|
||||
1 [C17:219] Orzhov Signet
|
||||
1 [C17:221] Rakdos Signet
|
||||
1 [C17:222] Skullclamp
|
||||
1 [C17:223] Sol Ring
|
||||
1 [C17:22] Bloodsworn Steward
|
||||
1 [C17:231] Well of Lost Dreams
|
||||
1 [C17:232] Worn Powerstone
|
||||
1 [C17:233] Akoum Refuge
|
||||
1 [C17:236] Bloodfell Caves
|
||||
1 [C17:238] Bojuka Bog
|
||||
1 [C17:239] Boros Garrison
|
||||
1 [C17:23] Crimson Honor Guard
|
||||
1 [C17:240] Boros Guildgate
|
||||
1 [C17:241] Cinder Barrens
|
||||
1 [C17:242] Command Tower
|
||||
1 [C17:248] Evolving Wilds
|
||||
1 [C17:250] Forsaken Sanctuary
|
||||
1 [C17:259] Kabira Crossroads
|
||||
1 [C17:25] Disrupt Decorum
|
||||
1 [C17:265] Nomad Outpost
|
||||
1 [C17:266] Opal Palace
|
||||
1 [C17:268] Orzhov Basilica
|
||||
1 [C17:269] Orzhov Guildgate
|
||||
1 [C17:270] Rakdos Carnarium
|
||||
1 [C17:271] Rakdos Guildgate
|
||||
1 [C17:276] Scoured Barrens
|
||||
1 [C17:27] Kindred Charge
|
||||
1 [C17:282] Stone Quarry
|
||||
1 [C17:285] Terramorphic Expanse
|
||||
1 [C17:288] Urborg Volcano
|
||||
1 [C17:294] Wind-Scarred Crag
|
||||
1 [C17:295] Plains
|
||||
1 [C17:296] Plains
|
||||
1 [C17:297] Plains
|
||||
1 [C17:305] Mountain
|
||||
1 [C17:306] Mountain
|
||||
1 [C17:3] Curse of Vitality
|
||||
1 [C17:40] Licia, Sanguine Tribune
|
||||
1 [C17:42] Mathas, Fiend Seeker
|
||||
1 [C17:52] Heirloom Blade
|
||||
1 [C17:56] Path of Ancestry
|
||||
1 [C17:57] Blind Obedience
|
||||
1 [C17:5] Kindred Boon
|
||||
1 [C17:60] Fell the Mighty
|
||||
1 [C17:70] Return to Dust
|
||||
1 [C17:76] Swords to Plowshares
|
||||
1 [C17:8] Teferi's Protection
|
||||
1 [C17:95] Ambition's Cost
|
||||
1 [C17:96] Anowon, the Ruin Sage
|
||||
1 [C17:98] Black Market
|
||||
1 [C17:99] Blood Artist
|
||||
2 [C17:304] Mountain
|
||||
3 [C17:301] Swamp
|
||||
2 [C17:303] Swamp
|
||||
3 [C17:302] Swamp
|
||||
SB: 1 [C17:36] Edgar Markov
|
|
@ -33,7 +33,7 @@
|
|||
1 [5ED:191] Sylvan Library
|
||||
1 [CMD:269] Command Tower
|
||||
1 [EXO:35] Forbid
|
||||
1 [DDO:36] AEtherize
|
||||
1 [DDO:36] Aetherize
|
||||
1 [KTK:36] Dig Through Time
|
||||
1 [RTR:141] Abrupt Decay
|
||||
1 [SHM:280] Sunken Ruins
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
SB: 1 [C14:104] Cyclonic Rift
|
||||
SB: 2 [THS:47] Dissolve
|
||||
SB: 3 [THS:49] Gainsay
|
||||
SB: 1 [DGM:11] AEtherling
|
||||
SB: 1 [DGM:11] Aetherling
|
||||
SB: 1 [RTR:36] Dispel
|
||||
SB: 2 [M14:53] Domestication
|
||||
SB: 2 [RTR:44] Jace, Architect of Thought
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
SB: 1 [C14:104] Cyclonic Rift
|
||||
SB: 1 [THS:46] Curse of the Swine
|
||||
SB: 4 [THS:49] Gainsay
|
||||
SB: 1 [DGM:11] AEtherling
|
||||
SB: 1 [DGM:11] Aetherling
|
||||
SB: 2 [GTC:44] Rapid Hybridization
|
||||
SB: 1 [RTR:44] Jace, Architect of Thought
|
||||
SB: 3 [M14:53] Domestication
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
SB: 2 [C14:104] Cyclonic Rift
|
||||
SB: 1 [THS:47] Dissolve
|
||||
SB: 3 [THS:49] Gainsay
|
||||
SB: 1 [DGM:11] AEtherling
|
||||
SB: 1 [DGM:11] Aetherling
|
||||
SB: 1 [GTC:44] Rapid Hybridization
|
||||
SB: 1 [RTR:36] Dispel
|
||||
SB: 2 [M14:53] Domestication
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
SB: 2 [THS:47] Dissolve
|
||||
SB: 1 [THS:38] Annul
|
||||
SB: 4 [THS:49] Gainsay
|
||||
SB: 1 [DGM:11] AEtherling
|
||||
SB: 1 [DGM:11] Aetherling
|
||||
SB: 1 [GTC:44] Rapid Hybridization
|
||||
SB: 1 [RTR:36] Dispel
|
||||
SB: 1 [M14:53] Domestication
|
||||
|
|
|
@ -16,7 +16,7 @@ SB: 2 [C14:104] Cyclonic Rift
|
|||
SB: 1 [THS:223] Nykthos, Shrine to Nyx
|
||||
SB: 1 [THS:47] Dissolve
|
||||
SB: 2 [THS:49] Gainsay
|
||||
SB: 2 [DGM:11] AEtherling
|
||||
SB: 2 [DGM:11] Aetherling
|
||||
SB: 1 [RTR:36] Dispel
|
||||
SB: 1 [GTC:44] Rapid Hybridization
|
||||
SB: 1 [M14:53] Domestication
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
4 [THS:66] Thassa, God of the Sea
|
||||
SB: 3 [THS:47] Dissolve
|
||||
SB: 3 [THS:49] Gainsay
|
||||
SB: 1 [DGM:11] AEtherling
|
||||
SB: 1 [DGM:11] Aetherling
|
||||
SB: 2 [M14:46] Claustrophobia
|
||||
SB: 3 [M14:53] Domestication
|
||||
SB: 2 [RTR:44] Jace, Architect of Thought
|
||||
|
|
|
@ -18,7 +18,7 @@ SB: 1 [C14:104] Cyclonic Rift
|
|||
SB: 1 [THS:47] Dissolve
|
||||
SB: 1 [RTR:231] Pithing Needle
|
||||
SB: 2 [THS:49] Gainsay
|
||||
SB: 2 [DGM:11] AEtherling
|
||||
SB: 2 [DGM:11] Aetherling
|
||||
SB: 2 [GTC:44] Rapid Hybridization
|
||||
SB: 2 [RTR:36] Dispel
|
||||
SB: 2 [M14:53] Domestication
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
21 [UNH:137] Island
|
||||
4 [THS:66] Thassa, God of the Sea
|
||||
SB: 1 [RTR:231] Pithing Needle
|
||||
SB: 2 [DGM:11] AEtherling
|
||||
SB: 2 [DGM:11] Aetherling
|
||||
SB: 2 [M14:215] Ratchet Bomb
|
||||
SB: 1 [M14:228] Mutavault
|
||||
SB: 1 [THS:71] Triton Tactics
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
4 [RTR:201] Supreme Verdict
|
||||
4 [RTR:200] Sphinx's Revelation
|
||||
4 [RTR:155] Detention Sphere
|
||||
1 [DGM:11] AEtherling
|
||||
1 [DGM:11] Aetherling
|
||||
2 [M14:228] Mutavault
|
||||
1 [BNG:25] Revoke Existence
|
||||
2 [M14:96] Doom Blade
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
3 [RTR:145] Azorius Charm
|
||||
4 [RTR:200] Sphinx's Revelation
|
||||
4 [RTR:155] Detention Sphere
|
||||
2 [DGM:11] AEtherling
|
||||
2 [DGM:11] Aetherling
|
||||
2 [THS:90] Hero's Downfall
|
||||
1 [M14:96] Doom Blade
|
||||
1 [DGM:127] Far // Away
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
4 [RTR:201] Supreme Verdict
|
||||
4 [RTR:200] Sphinx's Revelation
|
||||
4 [RTR:155] Detention Sphere
|
||||
1 [DGM:11] AEtherling
|
||||
1 [DGM:11] Aetherling
|
||||
2 [M14:228] Mutavault
|
||||
1 [BNG:25] Revoke Existence
|
||||
2 [M14:96] Doom Blade
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
1 [RTR:145] Azorius Charm
|
||||
4 [RTR:200] Sphinx's Revelation
|
||||
3 [RTR:155] Detention Sphere
|
||||
1 [DGM:11] AEtherling
|
||||
1 [DGM:11] Aetherling
|
||||
3 [THS:90] Hero's Downfall
|
||||
1 [M14:228] Mutavault
|
||||
4 [RTR:44] Jace, Architect of Thought
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
4 [RTR:200] Sphinx's Revelation
|
||||
4 [RTR:155] Detention Sphere
|
||||
2 [DGM:57] Blood Baron of Vizkopa
|
||||
1 [DGM:11] AEtherling
|
||||
1 [DGM:11] Aetherling
|
||||
2 [THS:90] Hero's Downfall
|
||||
4 [RTR:44] Jace, Architect of Thought
|
||||
2 [M15:52] Divination
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
3 [RTR:200] Sphinx's Revelation
|
||||
4 [RTR:145] Azorius Charm
|
||||
1 [RTR:155] Detention Sphere
|
||||
1 [DGM:11] AEtherling
|
||||
1 [DGM:11] Aetherling
|
||||
4 [THS:90] Hero's Downfall
|
||||
4 [M14:96] Doom Blade
|
||||
4 [RTR:44] Jace, Architect of Thought
|
||||
|
@ -20,7 +20,7 @@
|
|||
SB: 2 [RTR:155] Detention Sphere
|
||||
SB: 2 [DGM:57] Blood Baron of Vizkopa
|
||||
SB: 1 [THS:49] Gainsay
|
||||
SB: 1 [DGM:11] AEtherling
|
||||
SB: 1 [DGM:11] Aetherling
|
||||
SB: 1 [THS:107] Thoughtseize
|
||||
SB: 2 [M15:71] Negate
|
||||
SB: 2 [DGM:103] Sin Collector
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
SB: 1 [RTR:201] Supreme Verdict
|
||||
SB: 1 [C13:211] Selesnya Charm
|
||||
SB: 2 [M13:29] Rhox Faithmender
|
||||
SB: 1 [DGM:11] AEtherling
|
||||
SB: 1 [DGM:11] Aetherling
|
||||
SB: 2 [RTR:148] Centaur Healer
|
||||
SB: 2 [M15:51] Dissipate
|
||||
SB: 1 [M13:22] Oblivion Ring
|
||||
|
|
|
@ -24,7 +24,7 @@ SB: 1 [M15:169] Back to Nature
|
|||
SB: 1 [KTK:208] Temur Charm
|
||||
SB: 2 [THS:112] Anger of the Gods
|
||||
SB: 1 [KTK:42] Icy Blast
|
||||
SB: 1 [BNG:143] Unravel the AEther
|
||||
SB: 1 [BNG:143] Unravel the Aether
|
||||
SB: 1 [JOU:140] Setessan Tactics
|
||||
SB: 2 [M15:75] Polymorphist's Jest
|
||||
SB: 2 [KTK:37] Disdainful Stroke
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
4 [RTR:200] Sphinx's Revelation
|
||||
4 [RTR:155] Detention Sphere
|
||||
4 [C13:275] Azorius Guildgate
|
||||
1 [DGM:11] AEtherling
|
||||
1 [DGM:11] Aetherling
|
||||
3 [M14:228] Mutavault
|
||||
4 [RTR:44] Jace, Architect of Thought
|
||||
5 [UNH:136] Plains
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
3 [RTR:145] Azorius Charm
|
||||
4 [RTR:200] Sphinx's Revelation
|
||||
4 [C13:275] Azorius Guildgate
|
||||
1 [DGM:11] AEtherling
|
||||
1 [DGM:11] Aetherling
|
||||
4 [M14:228] Mutavault
|
||||
3 [RTR:44] Jace, Architect of Thought
|
||||
4 [M15:52] Divination
|
||||
|
|
|
@ -21,7 +21,7 @@ SB: 1 [RTR:201] Supreme Verdict
|
|||
SB: 2 [AVR:34] Righteous Blow
|
||||
SB: 2 [ISD:27] Purify the Grave
|
||||
SB: 1 [DGM:5] Renounce the Guilds
|
||||
SB: 1 [DGM:11] AEtherling
|
||||
SB: 1 [DGM:11] Aetherling
|
||||
SB: 2 [RTR:36] Dispel
|
||||
SB: 1 [RTR:44] Jace, Architect of Thought
|
||||
SB: 1 [M13:22] Oblivion Ring
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
4 [DDO:35] Accumulated Knowledge
|
||||
1 [DDO:34] Kiora, the Crashing Wave
|
||||
1 [DDO:37] Inkwell Leviathan
|
||||
1 [DDO:36] AEtherize
|
||||
1 [DDO:36] Aetherize
|
||||
1 [DDO:56] Simic Sky Swallower
|
||||
1 [DDO:57] Urban Evolution
|
||||
2 [DDO:58] Evolving Wilds
|
|
@ -2,7 +2,7 @@ NAME:Tezzeret
|
|||
1 [DDF:62] Elixir of Immortality
|
||||
1 [DDF:63] Contagion Clasp
|
||||
2 [DDF:60] Everflowing Chalice
|
||||
1 [DDF:61] AEther Spellbomb
|
||||
1 [DDF:61] Aether Spellbomb
|
||||
1 [DDF:66] Echoing Truth
|
||||
1 [DDF:67] Moonglove Extract
|
||||
1 [DDF:64] Energy Chamber
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
1 [DD2:15] Riftwing Cloudskate
|
||||
1 [DD2:7] Bottle Gnomes
|
||||
1 [DD2:18] Brine Elemental
|
||||
1 [DD2:17] AEthersnipe
|
||||
1 [DD2:17] Aethersnipe
|
||||
1 [DD2:19] Quicksilver Dragon
|
||||
6 [DD2:31] Island
|
||||
6 [DD2:32] Island
|
||||
|
|
|
@ -14,7 +14,7 @@ NAME:Jace (Jace vs. Vraska)
|
|||
1 [DDM:7] Dream Stalker
|
||||
1 [DDM:20] Errant Ephemeron
|
||||
1 [DDM:6] Crosstown Courier
|
||||
1 [DDM:5] AEther Figment
|
||||
1 [DDM:5] Aether Figment
|
||||
4 [DDM:40] Island
|
||||
1 [DDM:4] Phantasmal Bear
|
||||
1 [DDM:3] Jace's Phantasm
|
||||
|
@ -30,7 +30,7 @@ NAME:Jace (Jace vs. Vraska)
|
|||
1 [DDM:14] Phantasmal Dragon
|
||||
1 [DDM:15] Body Double
|
||||
4 [DDM:37] Island
|
||||
1 [DDM:12] AEther Adept
|
||||
1 [DDM:12] Aether Adept
|
||||
1 [DDM:34] Spelltwine
|
||||
1 [DDM:35] Dread Statuary
|
||||
1 [DDM:13] Archaeomancer
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
1 [DDR:1] Nissa, Voice of Zendikar
|
||||
2 [DDR:28] Khalni Garden
|
||||
1 [DDR:29] Mosswort Bridge
|
||||
2 [DDR:26] Woodborn Behemoth
|
||||
2 [DDR:27] Fertile Thicket
|
||||
1 [DDR:24] Walker of the Grove
|
||||
1 [DDR:25] Wood Elves
|
||||
2 [DDR:22] Thornweald Archer
|
||||
2 [DDR:23] Vines of the Recluse
|
||||
1 [DDR:20] Seek the Horizon
|
||||
1 [DDR:21] Thicket Elemental
|
||||
2 [DDR:19] Scythe Leopard
|
||||
1 [DDR:17] Oran-Rief Invoker
|
||||
1 [DDR:18] Saddleback Lagac
|
||||
1 [DDR:15] Oakgnarl Warrior
|
||||
1 [DDR:16] Oran-Rief Hydra
|
||||
3 [DDR:35] Forest
|
||||
1 [DDR:13] Natural Connection
|
||||
1 [DDR:14] Nissa's Chosen
|
||||
4 [DDR:33] Forest
|
||||
2 [DDR:11] Gilt-Leaf Seer
|
||||
3 [DDR:34] Forest
|
||||
2 [DDR:12] Jaddi Lifestrider
|
||||
4 [DDR:31] Forest
|
||||
4 [DDR:32] Forest
|
||||
1 [DDR:10] Gaea's Blessing
|
||||
1 [DDR:30] Treetop Village
|
||||
1 [DDR:9] Fertilid
|
||||
2 [DDR:8] Elvish Visionary
|
||||
1 [DDR:7] Crop Rotation
|
||||
1 [DDR:6] Cloudthresher
|
||||
2 [DDR:5] Civic Wayfinder
|
||||
2 [DDR:4] Citanul Woodreaders
|
||||
2 [DDR:3] Briarhorn
|
||||
1 [DDR:2] Abundance
|
|
@ -0,0 +1,35 @@
|
|||
2 [DDR:48] Fetid Imp
|
||||
1 [DDR:49] Foul Imp
|
||||
4 [DDR:68] Swamp
|
||||
1 [DDR:46] Disfigure
|
||||
5 [DDR:69] Swamp
|
||||
2 [DDR:47] Doom Blade
|
||||
5 [DDR:66] Swamp
|
||||
1 [DDR:44] Desecration Demon
|
||||
4 [DDR:67] Swamp
|
||||
1 [DDR:45] Despoiler of Souls
|
||||
2 [DDR:42] Carrier Thrall
|
||||
1 [DDR:64] Unhallowed Pact
|
||||
2 [DDR:65] Leechridden Swamp
|
||||
1 [DDR:43] Demon's Grasp
|
||||
2 [DDR:40] Blistergrub
|
||||
1 [DDR:62] Squelching Leeches
|
||||
1 [DDR:41] Cadaver Imp
|
||||
1 [DDR:63] Tendrils of Corruption
|
||||
1 [DDR:60] Shadows of the Past
|
||||
2 [DDR:61] Smallpox
|
||||
1 [DDR:39] Bala Ged Scorpion
|
||||
1 [DDR:37] Altar's Reap
|
||||
1 [DDR:59] Renegade Demon
|
||||
1 [DDR:38] Ambition's Cost
|
||||
1 [DDR:57] Priest of the Blood Rite
|
||||
1 [DDR:36] Ob Nixilis Reignited
|
||||
2 [DDR:58] Quest for the Gravelord
|
||||
1 [DDR:55] Mire's Toll
|
||||
1 [DDR:56] Pestilence Demon
|
||||
1 [DDR:53] Indulgent Tormentor
|
||||
1 [DDR:54] Innocent Blood
|
||||
2 [DDR:51] Grim Discovery
|
||||
1 [DDR:52] Hideous End
|
||||
1 [DDR:50] Giant Scorpion
|
||||
4 [DDR:70] Swamp
|
|
@ -19,7 +19,7 @@
|
|||
2 [DDI:49] Fiery Hellhound
|
||||
1 [DDI:67] Searing Blaze
|
||||
1 [DDI:66] Vulshok Morningstar
|
||||
1 [DDI:48] AEther Membrane
|
||||
1 [DDI:48] Aether Membrane
|
||||
1 [DDI:65] Journeyer's Kite
|
||||
2 [DDI:47] Pilgrim's Eye
|
||||
1 [DDI:46] Pygmy Pyrosaur
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
3 [AER:173] Renegade Map
|
||||
2 [KLD:144] Armorcraft Judge
|
||||
9 [KLD:263] Forest
|
||||
1 [KLD:181] Engineered Might
|
||||
1 [AER:149] Daredevil Dragster
|
||||
1 [AER:105] Aid from the Cowl
|
||||
3 [AER:7] Audacious Infiltrator
|
||||
1 [AER:5] Airdrop Aeronauts
|
||||
4 [AER:189] Tranquil Expanse
|
||||
1 [AER:22] Solemn Recruit
|
||||
2 [AER:126] Unbridled Growth
|
||||
2 [AER:125] Silkweaver Elite
|
||||
1 [AER:120] Prey Upon
|
||||
4 [AER:186] Inspiring Roar
|
||||
1 [AER:185] Ajani, Valiant Protector
|
||||
2 [AER:188] Ajani's Aid
|
||||
3 [AER:187] Ajani's Comrade
|
||||
1 [AER:121] Ridgescale Tusker
|
||||
9 [KLD:250] Plains
|
||||
1 [KLD:156] Ghirapur Guide
|
||||
2 [AER:180] Verdant Automaton
|
||||
1 [AER:15] Deadeye Harpooner
|
||||
2 [AER:117] Narnam Renegade
|
||||
1 [AER:118] Natural Obsolescence
|
||||
2 [AER:113] Lifecraft Cavalry
|
||||
LAYOUT MAIN:(1,7)(CMC,false,50)|([KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[AER:189],[AER:189],[AER:189],[AER:189])([AER:117],[AER:117],[AER:120],[AER:173],[AER:173],[AER:173],[AER:126],[AER:126])([AER:187],[AER:187],[AER:187],[AER:7],[AER:7],[AER:7],[AER:118],[AER:180],[AER:180])([AER:149],[AER:15],[KLD:156],[AER:125],[AER:125],[AER:22])([AER:188],[AER:188],[KLD:144],[KLD:144],[AER:186],[AER:186],[AER:186],[AER:186])([AER:105],[AER:5],[KLD:181],[AER:113],[AER:113],[AER:121])([AER:185])
|
||||
LAYOUT SIDEBOARD:(0,0)(NONE,false,50)|
|
|
@ -0,0 +1,27 @@
|
|||
11 [KLD:261] Mountain
|
||||
1 [KLD:265] Chandra, Pyrogenius
|
||||
2 [KLD:188] Veteran Motorist
|
||||
4 [KLD:266] Flame Lash
|
||||
1 [KLD:28] Skyswirl Harrier
|
||||
1 [KLD:225] Ovalchase Dragster
|
||||
2 [KLD:267] Liberating Combustion
|
||||
3 [KLD:268] Renegade Firebrand
|
||||
4 [AKH:274] Stone Quarry
|
||||
1 [KLD:109] Cathartic Reunion
|
||||
1 [KLD:107] Brazen Scourge
|
||||
10 [KLD:250] Plains
|
||||
2 [KLD:133] Spireside Infiltrator
|
||||
2 [KLD:233] Sky Skiff
|
||||
2 [KLD:230] Renegade Freighter
|
||||
1 [KLD:132] Speedway Fanatic
|
||||
2 [KLD:33] Trusty Companion
|
||||
1 [KLD:198] Bomat Bazaar Barge
|
||||
1 [KLD:16] Gearshift Ace
|
||||
2 [KLD:2] Aerial Responder
|
||||
2 [KLD:7] Built to Last
|
||||
1 [KLD:236] Snare Thopter
|
||||
1 [KLD:214] Fleetwheel Cruiser
|
||||
1 [KLD:114] Fateful Showdown
|
||||
1 [KLD:238] Weldfast Monitor
|
||||
LAYOUT MAIN:(1,7)(CMC,false,50)|([KLD:261],[KLD:261],[KLD:261],[KLD:261],[KLD:261],[KLD:261],[KLD:261],[KLD:261],[KLD:261],[KLD:261],[KLD:261],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[KLD:250],[AKH:274],[AKH:274],[AKH:274],[AKH:274])([KLD:7],[KLD:7])([KLD:109],[KLD:16],[KLD:233],[KLD:233],[KLD:132],[KLD:33],[KLD:33],[KLD:188],[KLD:188])([KLD:2],[KLD:2],[KLD:107],[KLD:268],[KLD:268],[KLD:268],[KLD:230],[KLD:230],[KLD:133],[KLD:133],[KLD:238])([KLD:198],[KLD:114],[KLD:266],[KLD:266],[KLD:266],[KLD:266],[KLD:214],[KLD:225],[KLD:236])([KLD:267],[KLD:267],[KLD:28])([KLD:265])
|
||||
LAYOUT SIDEBOARD:(0,0)(NONE,false,50)|
|
|
@ -0,0 +1,24 @@
|
|||
1 [AKH:270] Gideon, Martial Paragon
|
||||
2 [AKH:272] Gideon's Resolve
|
||||
10 [AKH:250] Plains
|
||||
3 [AKH:271] Companion of the Trials
|
||||
1 [AKH:10] Devoted Crop-Mate
|
||||
1 [AKH:31] Tah-Crop Elite
|
||||
2 [AKH:29] Sparring Mummy
|
||||
1 [AKH:18] Impeccable Timing
|
||||
3 [AKH:17] Gust Walker
|
||||
1 [AKH:16] Glory-Bound Initiate
|
||||
3 [AKH:117] Ahn-Crop Crasher
|
||||
2 [AKH:139] Hyena Pack
|
||||
2 [AKH:129] Electrify
|
||||
1 [AKH:146] Pathmaker Initiate
|
||||
2 [AKH:124] Cartouche of Zeal
|
||||
2 [AKH:200] Honored Crop-Captain
|
||||
1 [AKH:137] Hazoret's Favor
|
||||
4 [AKH:274] Stone Quarry
|
||||
4 [AKH:273] Graceful Cat
|
||||
3 [AKH:152] Trial of Zeal
|
||||
1 [AKH:144] Nef-Crop Entangler
|
||||
10 [AKH:253] Mountain
|
||||
LAYOUT MAIN:(1,6)(CMC,false,50)|([AKH:274],[AKH:274],[AKH:274],[AKH:274],[AKH:250],[AKH:250],[AKH:250],[AKH:250],[AKH:250],[AKH:250],[AKH:250],[AKH:250],[AKH:250],[AKH:250],[AKH:253],[AKH:253],[AKH:253],[AKH:253],[AKH:253],[AKH:253],[AKH:253],[AKH:253],[AKH:253],[AKH:253])([AKH:124],[AKH:124])([AKH:16],[AKH:17],[AKH:17],[AKH:17],[AKH:144],[AKH:146],[AKH:200],[AKH:200],[AKH:18])([AKH:271],[AKH:271],[AKH:271],[AKH:10],[AKH:273],[AKH:273],[AKH:273],[AKH:273],[AKH:117],[AKH:117],[AKH:117],[AKH:137],[AKH:152],[AKH:152],[AKH:152])([AKH:29],[AKH:29],[AKH:31],[AKH:139],[AKH:139],[AKH:129],[AKH:129])([AKH:270],[AKH:272],[AKH:272])
|
||||
LAYOUT SIDEBOARD:(0,0)(NONE,false,50)|
|
|
@ -0,0 +1,26 @@
|
|||
1 [AKH:160] Channeler Initiate
|
||||
1 [AKH:91] Festering Mummy
|
||||
1 [AKH:162] Crocodile of the Crossing
|
||||
2 [AKH:89] Dune Beetle
|
||||
2 [AKH:83] Cartouche of Ambition
|
||||
2 [AKH:93] Gravedigger
|
||||
2 [AKH:109] Splendid Agony
|
||||
1 [AKH:226] Edifice of Authority
|
||||
2 [AKH:79] Baleful Ammit
|
||||
4 [AKH:278] Tattered Mummy
|
||||
1 [AKH:234] Oracle's Vault
|
||||
2 [AKH:113] Trial of Ambition
|
||||
2 [AKH:277] Liliana's Influence
|
||||
1 [AKH:167] Gift of Paradise
|
||||
1 [AKH:244] Grasping Dunes
|
||||
2 [AKH:158] Cartouche of Strength
|
||||
4 [AKH:279] Foul Orchard
|
||||
2 [AKH:197] Decimator Beetle
|
||||
11 [AKH:252] Swamp
|
||||
3 [AKH:276] Desiccated Naga
|
||||
2 [AKH:166] Giant Spider
|
||||
1 [AKH:232] Luxa River Shrine
|
||||
9 [AKH:254] Forest
|
||||
1 [AKH:275] Liliana, Death Wielder
|
||||
LAYOUT MAIN:(1,8)(CMC,false,50)|([AKH:254],[AKH:254],[AKH:254],[AKH:254],[AKH:254],[AKH:254],[AKH:254],[AKH:254],[AKH:254],[AKH:279],[AKH:279],[AKH:279],[AKH:279],[AKH:244],[AKH:252],[AKH:252],[AKH:252],[AKH:252],[AKH:252],[AKH:252],[AKH:252],[AKH:252],[AKH:252],[AKH:252],[AKH:252])([AKH:91])([AKH:160],[AKH:89],[AKH:89],[AKH:278],[AKH:278],[AKH:278],[AKH:278],[AKH:113],[AKH:113])([AKH:79],[AKH:79],[AKH:83],[AKH:83],[AKH:158],[AKH:158],[AKH:276],[AKH:276],[AKH:276],[AKH:226],[AKH:167],[AKH:232],[AKH:109],[AKH:109])([AKH:162],[AKH:166],[AKH:166],[AKH:93],[AKH:93],[AKH:234])([AKH:197],[AKH:197])([AKH:277],[AKH:277])([AKH:275])
|
||||
LAYOUT SIDEBOARD:(0,0)(NONE,false,50)|
|
|
@ -0,0 +1,24 @@
|
|||
4 [KLD:272] Terrain Elemental
|
||||
2 [KLD:273] Verdant Crescendo
|
||||
2 [KLD:141] Appetite for the Unnatural
|
||||
1 [KLD:270] Nissa, Nature's Artisan
|
||||
2 [KLD:171] Thriving Rhino
|
||||
2 [KLD:161] Longtusk Cub
|
||||
3 [KLD:271] Guardian of the Great Conduit
|
||||
2 [KLD:53] Janjeet Sentry
|
||||
1 [KLD:167] Riparian Tiger
|
||||
3 [KLD:145] Attune with Aether
|
||||
2 [KLD:54] Long-Finned Skywhale
|
||||
2 [KLD:142] Arborback Stomper
|
||||
4 [KLD:274] Woodland Stream
|
||||
11 [KLD:263] Forest
|
||||
2 [KLD:66] Thriving Turtle
|
||||
2 [KLD:55] Malfunction
|
||||
8 [KLD:253] Island
|
||||
2 [KLD:180] Empyreal Voyager
|
||||
1 [KLD:39] Aethersquall Ancient
|
||||
1 [KLD:168] Sage of Shaila's Claim
|
||||
2 [KLD:169] Servant of the Conduit
|
||||
1 [KLD:147] Bristling Hydra
|
||||
LAYOUT MAIN:(1,8)(CMC,false,50)|([KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:263],[KLD:253],[KLD:253],[KLD:253],[KLD:253],[KLD:253],[KLD:253],[KLD:253],[KLD:253],[KLD:274],[KLD:274],[KLD:274],[KLD:274])([KLD:145],[KLD:145],[KLD:145],[KLD:66],[KLD:66])([KLD:161],[KLD:161],[KLD:168],[KLD:169],[KLD:169],[KLD:272],[KLD:272],[KLD:272],[KLD:272])([KLD:141],[KLD:141],[KLD:180],[KLD:180],[KLD:53],[KLD:53],[KLD:171],[KLD:171])([KLD:147],[KLD:271],[KLD:271],[KLD:271],[KLD:54],[KLD:54],[KLD:55],[KLD:55],[KLD:273],[KLD:273])([KLD:142],[KLD:142],[KLD:167])([KLD:270])([KLD:39])
|
||||
LAYOUT SIDEBOARD:(0,0)(NONE,false,50)|
|
|
@ -0,0 +1,27 @@
|
|||
3 [AER:193] Tezzeret's Simulacrum
|
||||
4 [AER:192] Pendulum of Patterns
|
||||
1 [AER:151] Foundry Assembler
|
||||
4 [AER:194] Submerged Boneyard
|
||||
2 [AER:191] Tezzeret's Betrayal
|
||||
1 [AER:190] Tezzeret, Master of Metal
|
||||
1 [AER:42] Reverse Engineer
|
||||
1 [AER:167] Ornithopter
|
||||
1 [AER:65] Ironclad Revolutionary
|
||||
1 [KLD:207] Dukhara Peafowl
|
||||
1 [AER:163] Merchant's Dockhand
|
||||
1 [AER:144] Barricade Breaker
|
||||
2 [AER:143] Augmenting Automaton
|
||||
1 [AER:41] Quicksmith Spy
|
||||
2 [KLD:74] Dhund Operative
|
||||
1 [AER:58] Fen Hauler
|
||||
11 [KLD:253] Island
|
||||
2 [AER:138] Tezzeret's Touch
|
||||
10 [KLD:258] Swamp
|
||||
2 [AER:178] Universal Solvent
|
||||
2 [AER:156] Implement of Examination
|
||||
2 [AER:50] Wind-Kin Raiders
|
||||
1 [AER:177] Treasure Keeper
|
||||
2 [AER:30] Bastion Inventor
|
||||
1 [KLD:80] Essence Extraction
|
||||
LAYOUT MAIN:(1,8)(CMC,false,50)|([KLD:253],[KLD:253],[KLD:253],[KLD:253],[KLD:253],[KLD:253],[KLD:253],[KLD:253],[KLD:253],[KLD:253],[KLD:253],[AER:167],[AER:194],[AER:194],[AER:194],[AER:194],[KLD:258],[KLD:258],[KLD:258],[KLD:258],[KLD:258],[KLD:258],[KLD:258],[KLD:258],[KLD:258],[KLD:258])([AER:143],[AER:143],[AER:163],[AER:178],[AER:178])([KLD:74],[KLD:74],[AER:192],[AER:192],[AER:192],[AER:192])([KLD:80],[AER:156],[AER:156],[AER:193],[AER:193],[AER:193],[AER:138],[AER:138])([KLD:207],[AER:41],[AER:177])([AER:151],[AER:42],[AER:191],[AER:191])([AER:30],[AER:30],[AER:65],[AER:190],[AER:50],[AER:50])([AER:144],[AER:58])
|
||||
LAYOUT SIDEBOARD:(0,0)(NONE,false,50)|
|
|
@ -25,7 +25,7 @@ SB: 1 [KTK:174] Duneblast
|
|||
SB: 1 [M15:103] Liliana Vess
|
||||
SB: 2 [KTK:81] Murderous Cut
|
||||
SB: 1 [KTK:8] End Hostilities
|
||||
SB: 1 [BNG:143] Unravel the AEther
|
||||
SB: 1 [BNG:143] Unravel the Aether
|
||||
SB: 3 [BNG:65] Drown in Sorrow
|
||||
SB: 1 [M15:18] Mass Calcify
|
||||
SB: 2 [M15:187] Nissa, Worldwaker
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
3 [MMA:198] Arcbound Ravager
|
||||
1 [HOP:136] Seat of the Synod
|
||||
4 [MRD:62] Disciple of the Vault
|
||||
4 [DST:91] AEther Vial
|
||||
4 [DST:91] Aether Vial
|
||||
2 [MRD:286] Vault of Whispers
|
||||
1 [FNMP:105] Myr Enforcer
|
||||
1 [DDF:40] Arcbound Worker
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
21 [UNH:137] Island
|
||||
4 [THS:66] Thassa, God of the Sea
|
||||
SB: 1 [RTR:231] Pithing Needle
|
||||
SB: 2 [DGM:11] AEtherling
|
||||
SB: 2 [DGM:11] Aetherling
|
||||
SB: 2 [M14:215] Ratchet Bomb
|
||||
SB: 1 [THS:71] Triton Tactics
|
||||
SB: 3 [M15:83] Wall of Frost
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
SB: 1 [THS:57] Omenspeaker
|
||||
SB: 1 [THS:47] Dissolve
|
||||
SB: 3 [THS:49] Gainsay
|
||||
SB: 2 [DGM:11] AEtherling
|
||||
SB: 2 [DGM:11] Aetherling
|
||||
SB: 3 [GTC:44] Rapid Hybridization
|
||||
SB: 3 [RTR:44] Jace, Architect of Thought
|
||||
SB: 2 [M15:71] Negate
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
3 [RTR:200] Sphinx's Revelation
|
||||
4 [RTR:145] Azorius Charm
|
||||
1 [RTR:155] Detention Sphere
|
||||
1 [DGM:11] AEtherling
|
||||
1 [DGM:11] Aetherling
|
||||
4 [THS:90] Hero's Downfall
|
||||
4 [M14:96] Doom Blade
|
||||
4 [RTR:44] Jace, Architect of Thought
|
||||
|
@ -20,7 +20,7 @@
|
|||
SB: 2 [RTR:155] Detention Sphere
|
||||
SB: 2 [DGM:57] Blood Baron of Vizkopa
|
||||
SB: 1 [THS:49] Gainsay
|
||||
SB: 1 [DGM:11] AEtherling
|
||||
SB: 1 [DGM:11] Aetherling
|
||||
SB: 1 [THS:107] Thoughtseize
|
||||
SB: 2 [M15:71] Negate
|
||||
SB: 2 [DGM:103] Sin Collector
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
2 [THS:188] Ashiok, Nightmare Weaver
|
||||
1 [BNG:163] Temple of Enlightenment
|
||||
1 [BNG:65] Drown in Sorrow
|
||||
1 [M15:44] AEtherspouts
|
||||
1 [M15:44] Aetherspouts
|
||||
1 [DTK:124] Ultimate Price
|
||||
3 [M15:224] Perilous Vault
|
||||
4 [FRF:168] Dismal Backwater
|
||||
|
@ -25,7 +25,7 @@
|
|||
2 [JOU:82] Silence the Believers
|
||||
3 [M15:245] Radiant Fountain
|
||||
SB: 1 [JOU:43] Interpret the Signs
|
||||
SB: 1 [M15:44] AEtherspouts
|
||||
SB: 1 [M15:44] Aetherspouts
|
||||
SB: 1 [KTK:49] Pearl Lake Ancient
|
||||
SB: 1 [FRF:87] Tasigur, the Golden Fang
|
||||
SB: 1 [KTK:218] Cranial Archive
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
XMage.de 1 (Europe/Germany) fast :xmage.de:17171
|
||||
woogerworks (North America/USA) :xmage.woogerworks.com:17171
|
||||
XMage Testserver (Europe/France) 1.4.8v0 :176.31.186.181:17171
|
||||
XMage BR (South America/Brazil) :ec2-54-233-67-0.sa-east-1.compute.amazonaws.com:17171
|
||||
old xmage.de (Europe/Germany) :185.3.232.200:17171
|
||||
xmage.us (North America/USA) :xmage.us:17171
|
||||
XMage Players MTG:xmageplayersmtg.ddns.net:17171
|
||||
XMage.tahiti :xmage.tahiti.one:443
|
||||
Seedds Server (Asia) :115.29.203.80:17171
|
||||
localhost -> connect to your local server (must be started):localhost:17171
|
||||
|
|
BIN
Mage.Client/sounds/GameCanStart.wav
Normal file
BIN
Mage.Client/sounds/GameCanStart.wav
Normal file
Binary file not shown.
|
@ -26,8 +26,8 @@
|
|||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="desktopPane" alignment="0" max="32767" attributes="0"/>
|
||||
<Component id="mageToolbar" alignment="0" pref="697" max="32767" attributes="0"/>
|
||||
<Component id="desktopPane" alignment="0" pref="769" max="32767" attributes="0"/>
|
||||
<Component id="mageToolbar" alignment="0" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
|
@ -78,9 +78,13 @@
|
|||
<SubComponents>
|
||||
<Component class="javax.swing.JButton" name="btnPreferences">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/menu/preferences.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="Preferences"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="By changing the settings in the preferences window you can adjust the look and behaviour of xmage."/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="4"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
|
@ -91,35 +95,29 @@
|
|||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnConnect">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Connect"/>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/menu/connect.png"/>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Connect to or disconnect from a XMage server."/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="4"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnConnectActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JToolBar$Separator" name="jSeparator3">
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnGames">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Games"/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnGamesActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JToolBar$Separator" name="jSeparator1">
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnDeckEditor">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/menu/deck_editor.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="Deck Editor"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Start the deck editor to create or modify decks."/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="4"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
|
@ -130,9 +128,13 @@
|
|||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnCollectionViewer">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Collection Viewer"/>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/menu/collection.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="Viewer"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Card viewer to show the cards of sets. "/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="4"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
|
@ -143,9 +145,13 @@
|
|||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnSendFeedback">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/menu/feedback.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="Feedback"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Send some feedback to the developers."/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="4"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
|
@ -154,11 +160,49 @@
|
|||
</Component>
|
||||
<Component class="javax.swing.JToolBar$Separator" name="jSeparator6">
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnSymbols">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/menu/symbol.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="Symbols"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="<HTML>Load the mana and other card symbols from the internet.<br>
Otherwise you only see the replacement sequence like {U} for blue mana symbol.<br>
You need to do that only once."/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="4"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnSymbolsActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JToolBar$Separator" name="jSeparatorSymbols">
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnImages">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/menu/images.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="Images"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="<HTML>Load card images from external sources."/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="4"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnImagesActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JToolBar$Separator" name="jSeparatorImages">
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnAbout">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/menu/about.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="About"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Some information about the developers."/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="4"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
|
@ -167,30 +211,15 @@
|
|||
</Component>
|
||||
<Component class="javax.swing.JToolBar$Separator" name="jSeparator7">
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="btnExit">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Exit"/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnExitActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jMemUsageLabel">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="2"/>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/menu/memory.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="100% Free mem"/>
|
||||
</Properties>
|
||||
<AuxValues>
|
||||
<AuxValue name="JavaCodeGenerator_AddingCodePre" type="java.lang.String" value="mageToolbar.add(Box.createHorizontalGlue());"/>
|
||||
</AuxValues>
|
||||
</Component>
|
||||
<Component class="javax.swing.JToolBar$Separator" name="jSeparator8">
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblStatus">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Not connected "/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="4"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -35,38 +35,32 @@ package mage.client;
|
|||
|
||||
import java.awt.AWTEvent;
|
||||
import java.awt.KeyboardFocusManager;
|
||||
import java.beans.PropertyVetoException;
|
||||
import javax.swing.plaf.basic.BasicInternalFrameUI;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public abstract class MagePane extends javax.swing.JInternalFrame {
|
||||
public abstract class MagePane extends javax.swing.JLayeredPane {
|
||||
|
||||
private String title = "no title set";
|
||||
|
||||
/**
|
||||
* Creates new form MagePane
|
||||
*/
|
||||
public MagePane() {
|
||||
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
||||
initComponents();
|
||||
hideTitle();
|
||||
}
|
||||
|
||||
private void hideTitle() {
|
||||
if (ui instanceof BasicInternalFrameUI) {
|
||||
((BasicInternalFrameUI) ui).setNorthPane(null);
|
||||
}
|
||||
}
|
||||
|
||||
public void changeGUISize() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
hideTitle();
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void hideFrame() {
|
||||
|
@ -75,11 +69,6 @@ public abstract class MagePane extends javax.swing.JInternalFrame {
|
|||
|
||||
public void removeFrame() {
|
||||
KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
|
||||
try {
|
||||
this.setClosed(true);
|
||||
} catch (PropertyVetoException ex) {
|
||||
|
||||
}
|
||||
MageFrame.deactivate(this);
|
||||
MageFrame.getDesktop().remove(this);
|
||||
}
|
||||
|
@ -106,18 +95,6 @@ public abstract class MagePane extends javax.swing.JInternalFrame {
|
|||
|
||||
setBorder(null);
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
|
||||
getContentPane().setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 765, Short.MAX_VALUE)
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 476, Short.MAX_VALUE)
|
||||
);
|
||||
|
||||
pack();
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
|
|
340
Mage.Client/src/main/java/mage/client/SessionHandler.java
Normal file
340
Mage.Client/src/main/java/mage/client/SessionHandler.java
Normal file
|
@ -0,0 +1,340 @@
|
|||
package mage.client;
|
||||
|
||||
import java.util.*;
|
||||
import mage.cards.decks.DeckCardLists;
|
||||
import mage.client.chat.LocalCommands;
|
||||
import mage.client.dialog.PreferencesDialog;
|
||||
import mage.constants.ManaType;
|
||||
import mage.constants.PlayerAction;
|
||||
import mage.game.match.MatchOptions;
|
||||
import mage.game.tournament.TournamentOptions;
|
||||
import mage.players.PlayerType;
|
||||
import mage.players.net.UserData;
|
||||
import mage.remote.Connection;
|
||||
import mage.remote.MageRemoteException;
|
||||
import mage.remote.Session;
|
||||
import mage.remote.SessionImpl;
|
||||
import mage.view.*;
|
||||
|
||||
/**
|
||||
* Created by IGOUDT on 15-9-2016.
|
||||
*/
|
||||
public final class SessionHandler {
|
||||
|
||||
private static Session session;
|
||||
|
||||
public static void startSession(MageFrame mageFrame) {
|
||||
|
||||
session = new SessionImpl(mageFrame);
|
||||
session.setJsonLogActive("true".equals(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_LOG_AUTO_SAVE, "true")));
|
||||
}
|
||||
|
||||
public static void ping() {
|
||||
session.ping();
|
||||
}
|
||||
|
||||
public static Session getSession() {
|
||||
return session;
|
||||
}
|
||||
|
||||
public static boolean isConnected() {
|
||||
return session.isConnected();
|
||||
}
|
||||
|
||||
public static String getVersionInfo() {
|
||||
return session.getVersionInfo();
|
||||
}
|
||||
|
||||
public static boolean connect(Connection connection) {
|
||||
return session.connect(connection);
|
||||
}
|
||||
|
||||
public static boolean stopConnecting() {
|
||||
return session.stopConnecting();
|
||||
}
|
||||
|
||||
public static void disconnect(boolean showmessage) {
|
||||
session.disconnect(showmessage);
|
||||
}
|
||||
|
||||
public static void sendPlayerAction(PlayerAction playerAction, UUID gameId, Object relatedUserId) {
|
||||
session.sendPlayerAction(playerAction, gameId, relatedUserId);
|
||||
}
|
||||
|
||||
public static void quitTournament(UUID tournamentId) {
|
||||
session.quitTournament(tournamentId);
|
||||
}
|
||||
|
||||
public static void quitDraft(UUID tournamentId) {
|
||||
session.quitDraft(tournamentId);
|
||||
}
|
||||
|
||||
public static void quitMatch(UUID gameId) {
|
||||
session.quitMatch(gameId);
|
||||
}
|
||||
|
||||
public static void stopWatching(UUID gameId) {
|
||||
session.stopWatching(gameId);
|
||||
}
|
||||
|
||||
public static void removeTable(UUID roomId, UUID tableId) {
|
||||
session.removeTable(roomId, tableId);
|
||||
}
|
||||
|
||||
public static void stopReplay(UUID gameId) {
|
||||
session.stopReplay(gameId);
|
||||
}
|
||||
|
||||
public static void sendPlayerUUID(UUID gameId, UUID id) {
|
||||
session.sendPlayerUUID(gameId, id);
|
||||
}
|
||||
|
||||
public static void sendPlayerBoolean(UUID gameId, boolean b) {
|
||||
session.sendPlayerBoolean(gameId, b);
|
||||
}
|
||||
|
||||
public static PlayerType[] getPlayerTypes() {
|
||||
return session.getPlayerTypes();
|
||||
}
|
||||
|
||||
public static boolean joinTournamentTable(UUID roomId, UUID tableId, String text, PlayerType selectedItem, Integer integer, DeckCardLists deckCardLists, String s) {
|
||||
return session.joinTournamentTable(roomId, tableId, text, selectedItem, integer, deckCardLists, s);
|
||||
}
|
||||
|
||||
public static void sendPlayerInteger(UUID gameId, int data) {
|
||||
session.sendPlayerInteger(gameId, data);
|
||||
}
|
||||
|
||||
public static void sendPlayerString(UUID gameId, String data) {
|
||||
session.sendPlayerString(gameId, data);
|
||||
}
|
||||
|
||||
public static boolean sendFeedback(String title, String type, String message, String email) {
|
||||
return session.sendFeedback(title, type, message, email);
|
||||
}
|
||||
|
||||
public static void swapSeats(UUID roomId, UUID tableId, int row, int targetrow) {
|
||||
session.swapSeats(roomId, tableId, row, targetrow);
|
||||
}
|
||||
|
||||
public static boolean leaveTable(UUID roomId, UUID tableId) {
|
||||
return session.leaveTable(roomId, tableId);
|
||||
}
|
||||
|
||||
public static void updatePreferencesForServer(UserData userData) {
|
||||
session.updatePreferencesForServer(userData);
|
||||
}
|
||||
|
||||
public static boolean isTableOwner(UUID roomId, UUID tableId) {
|
||||
return session.isTableOwner(roomId, tableId);
|
||||
}
|
||||
|
||||
public static Optional<UUID> getTableChatId(UUID tableId) {
|
||||
return session.getTableChatId(tableId);
|
||||
}
|
||||
|
||||
public static boolean startTournament(UUID roomId, UUID tableId) {
|
||||
return session.startTournament(roomId, tableId);
|
||||
}
|
||||
|
||||
public static boolean startMatch(UUID roomId, UUID tableId) {
|
||||
return session.startMatch(roomId, tableId);
|
||||
}
|
||||
|
||||
public static Optional<UUID> getGameChatId(UUID gameId) {
|
||||
return session.getGameChatId(gameId);
|
||||
}
|
||||
|
||||
public static boolean joinGame(UUID gameId) {
|
||||
return session.joinGame(gameId);
|
||||
}
|
||||
|
||||
public static boolean startReplay(UUID gameId) {
|
||||
return session.startReplay(gameId);
|
||||
}
|
||||
|
||||
public static void watchTournamentTable(UUID tableId) {
|
||||
session.watchTournamentTable(tableId);
|
||||
}
|
||||
|
||||
public static boolean joinTournament(UUID tournamentId) {
|
||||
return session.joinTournament(tournamentId);
|
||||
}
|
||||
|
||||
public static Optional<UUID> getTournamentChatId(UUID tournamentId) {
|
||||
return session.getTournamentChatId(tournamentId);
|
||||
}
|
||||
|
||||
public static TournamentView getTournament(UUID tournamentId) {
|
||||
try {
|
||||
return session.getTournament(tournamentId);
|
||||
} catch (MageRemoteException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static String getUserName() {
|
||||
return session.getUserName();
|
||||
}
|
||||
|
||||
public static boolean watchGame(UUID gameId) {
|
||||
return session.watchGame(gameId);
|
||||
}
|
||||
|
||||
public static void nextPlay(UUID gameId) {
|
||||
session.nextPlay(gameId);
|
||||
}
|
||||
|
||||
public static void previousPlay(UUID gameId) {
|
||||
session.previousPlay(gameId);
|
||||
}
|
||||
|
||||
public static void skipForward(UUID gameId, int i) {
|
||||
session.skipForward(gameId, i);
|
||||
}
|
||||
|
||||
public static boolean isTestMode() {
|
||||
return session.isTestMode();
|
||||
}
|
||||
|
||||
public static void cheat(UUID gameId, UUID playerId, DeckCardLists deckCardLists) {
|
||||
session.cheat(gameId, playerId, deckCardLists);
|
||||
}
|
||||
|
||||
public static String getSessionId() {
|
||||
return session.getSessionId();
|
||||
}
|
||||
|
||||
public static List<TournamentTypeView> getTournamentTypes() {
|
||||
return session.getTournamentTypes();
|
||||
}
|
||||
|
||||
public static boolean submitDeck(UUID tableId, DeckCardLists deckCardLists) {
|
||||
return session.submitDeck(tableId, deckCardLists);
|
||||
}
|
||||
|
||||
public static String[] getDeckTypes() {
|
||||
return session.getDeckTypes();
|
||||
}
|
||||
|
||||
public static String[] getDraftCubes() {
|
||||
return session.getDraftCubes();
|
||||
}
|
||||
|
||||
public static List<GameTypeView> getTournamentGameTypes() {
|
||||
return session.getTournamentGameTypes();
|
||||
}
|
||||
|
||||
public static TableView createTournamentTable(UUID roomId, TournamentOptions tOptions) {
|
||||
return session.createTournamentTable(roomId, tOptions);
|
||||
}
|
||||
|
||||
public static TableView createTable(UUID roomId, MatchOptions options) {
|
||||
return session.createTable(roomId, options);
|
||||
}
|
||||
|
||||
public static boolean joinTable(UUID roomId, UUID tableId, String playerName, PlayerType human, int skill, DeckCardLists deckCardLists, String text) {
|
||||
return session.joinTable(roomId, tableId, playerName, human, skill, deckCardLists, text);
|
||||
}
|
||||
|
||||
public static List<GameTypeView> getGameTypes() {
|
||||
return session.getGameTypes();
|
||||
}
|
||||
|
||||
public static boolean joinDraft(UUID draftId) {
|
||||
return session.joinDraft(draftId);
|
||||
}
|
||||
|
||||
public static DraftPickView sendCardPick(UUID draftId, UUID id, Set<UUID> cardsHidden) {
|
||||
return session.sendCardPick(draftId, id, cardsHidden);
|
||||
}
|
||||
|
||||
public static void sendCardMark(UUID draftId, UUID id) {
|
||||
session.sendCardMark(draftId, id);
|
||||
}
|
||||
|
||||
public static Optional<UUID> getRoomChatId(UUID roomId) {
|
||||
return session.getRoomChatId(roomId);
|
||||
}
|
||||
|
||||
public static Collection<RoomUsersView> getRoomUsers(UUID roomId) {
|
||||
try {
|
||||
return session.getRoomUsers(roomId);
|
||||
} catch (MageRemoteException e) {
|
||||
e.printStackTrace();
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
public static Collection<MatchView> getFinishedMatches(UUID roomId) {
|
||||
try {
|
||||
return session.getFinishedMatches(roomId);
|
||||
} catch (MageRemoteException e) {
|
||||
e.printStackTrace();
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
||||
public static void replayGame(UUID id) {
|
||||
session.replayGame(id);
|
||||
}
|
||||
|
||||
public static void watchTable(UUID roomId, UUID tableId) {
|
||||
session.watchTable(roomId, tableId);
|
||||
}
|
||||
|
||||
public static Collection<TableView> getTables(UUID roomId) {
|
||||
try {
|
||||
return session.getTables(roomId);
|
||||
} catch (MageRemoteException e) {
|
||||
e.printStackTrace();
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
||||
public static List<String> getServerMessages() {
|
||||
return session.getServerMessages();
|
||||
}
|
||||
|
||||
public static boolean joinChat(UUID chatId) {
|
||||
return session.joinChat(chatId);
|
||||
}
|
||||
|
||||
public static boolean leaveChat(UUID chatId) {
|
||||
return session.leaveChat(chatId);
|
||||
}
|
||||
|
||||
public static boolean sendChatMessage(UUID chatId, String text) {
|
||||
if (!LocalCommands.handleLocalCommands(chatId, text)) {
|
||||
return session.sendChatMessage(chatId, text);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean sendPlayerManaType(UUID gameId, UUID playerId, ManaType data) {
|
||||
return session.sendPlayerManaType(gameId, playerId, data);
|
||||
}
|
||||
|
||||
public static Optional<TableView> getTable(UUID roomId, UUID tableId) {
|
||||
return session.getTable(roomId, tableId);
|
||||
}
|
||||
|
||||
public static void updateDeck(UUID tableId, DeckCardLists deckCardLists) {
|
||||
session.updateDeck(tableId, deckCardLists);
|
||||
}
|
||||
|
||||
public static boolean emailAuthToken(Connection connection) {
|
||||
return session.emailAuthToken(connection);
|
||||
}
|
||||
|
||||
public static boolean resetPassword(Connection connection) {
|
||||
return session.resetPassword(connection);
|
||||
}
|
||||
|
||||
public static boolean register(Connection connection) {
|
||||
return session.register(connection);
|
||||
}
|
||||
}
|
|
@ -81,7 +81,7 @@ public class BigCard extends JComponent {
|
|||
|
||||
public BigCard(boolean rotated) {
|
||||
initComponents();
|
||||
if (!Plugins.getInstance().isCardPluginLoaded()) {
|
||||
if (!Plugins.instance.isCardPluginLoaded()) {
|
||||
initBounds(rotated);
|
||||
}
|
||||
setDoubleBuffered(true);
|
||||
|
@ -111,7 +111,7 @@ public class BigCard extends JComponent {
|
|||
image = TransformedImageCache.getResizedImage((BufferedImage)image, getWidth(), getHeight());
|
||||
}
|
||||
|
||||
if (this.cardId == null || !enlargeMode.equals(this.enlargeMode) || !this.cardId.equals(cardId)) {
|
||||
if (this.cardId == null || enlargeMode != this.enlargeMode || !this.cardId.equals(cardId)) {
|
||||
if (this.panel != null) {
|
||||
remove(this.panel);
|
||||
}
|
||||
|
@ -141,7 +141,7 @@ public class BigCard extends JComponent {
|
|||
|
||||
try {
|
||||
for (String line : strings) {
|
||||
doc.insertString(doc.getLength(), line + "\n", doc.getStyle("regular"));
|
||||
doc.insertString(doc.getLength(), line + '\n', doc.getStyle("regular"));
|
||||
}
|
||||
} catch (BadLocationException ble) {
|
||||
}
|
||||
|
|
|
@ -33,52 +33,12 @@
|
|||
*/
|
||||
package mage.client.cards;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Image;
|
||||
import java.awt.Point;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.RenderingHints;
|
||||
import java.awt.event.ComponentEvent;
|
||||
import java.awt.event.ComponentListener;
|
||||
import java.awt.event.FocusEvent;
|
||||
import java.awt.event.FocusListener;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.awt.event.MouseMotionListener;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.Popup;
|
||||
import javax.swing.PopupFactory;
|
||||
import javax.swing.text.BadLocationException;
|
||||
import javax.swing.text.Style;
|
||||
import javax.swing.text.StyleConstants;
|
||||
import javax.swing.text.StyleContext;
|
||||
import javax.swing.text.StyledDocument;
|
||||
import mage.cards.CardDimensions;
|
||||
import mage.cards.MagePermanent;
|
||||
import mage.cards.Sets;
|
||||
import mage.cards.TextPopup;
|
||||
import mage.cards.action.ActionCallback;
|
||||
import mage.client.MageFrame;
|
||||
import static mage.client.constants.Constants.CONTENT_MAX_XOFFSET;
|
||||
import static mage.client.constants.Constants.FRAME_MAX_HEIGHT;
|
||||
import static mage.client.constants.Constants.FRAME_MAX_WIDTH;
|
||||
import static mage.client.constants.Constants.NAME_FONT_MAX_SIZE;
|
||||
import static mage.client.constants.Constants.NAME_MAX_YOFFSET;
|
||||
import static mage.client.constants.Constants.POWBOX_TEXT_MAX_LEFT;
|
||||
import static mage.client.constants.Constants.POWBOX_TEXT_MAX_TOP;
|
||||
import static mage.client.constants.Constants.SYMBOL_MAX_XOFFSET;
|
||||
import static mage.client.constants.Constants.SYMBOL_MAX_YOFFSET;
|
||||
import static mage.client.constants.Constants.TYPE_MAX_YOFFSET;
|
||||
import mage.client.game.PlayAreaPanel;
|
||||
import mage.client.util.Config;
|
||||
import mage.client.util.DefaultActionCallback;
|
||||
|
@ -86,12 +46,21 @@ import mage.client.util.ImageHelper;
|
|||
import mage.client.util.gui.ArrowBuilder;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.EnlargeMode;
|
||||
import mage.remote.Session;
|
||||
import mage.view.AbilityView;
|
||||
import mage.view.CardView;
|
||||
import mage.view.CounterView;
|
||||
import mage.view.PermanentView;
|
||||
import mage.view.StackAbilityView;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.view.*;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.text.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import static mage.client.constants.Constants.*;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -100,11 +69,9 @@ import mage.view.StackAbilityView;
|
|||
@SuppressWarnings("serial")
|
||||
public class Card extends MagePermanent implements MouseMotionListener, MouseListener, FocusListener, ComponentListener {
|
||||
|
||||
protected static Session session = MageFrame.getSession();
|
||||
protected static DefaultActionCallback callback = DefaultActionCallback.getInstance();
|
||||
|
||||
protected Point p;
|
||||
protected CardDimensions dimension;
|
||||
protected final CardDimensions dimension;
|
||||
|
||||
protected final UUID gameId;
|
||||
protected final BigCard bigCard;
|
||||
|
@ -112,10 +79,10 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
protected Popup tooltipPopup;
|
||||
protected boolean tooltipShowing;
|
||||
|
||||
protected TextPopup tooltipText = new TextPopup();
|
||||
protected final TextPopup tooltipText = new TextPopup();
|
||||
protected BufferedImage background;
|
||||
protected BufferedImage image = new BufferedImage(FRAME_MAX_WIDTH, FRAME_MAX_HEIGHT, BufferedImage.TYPE_INT_RGB);
|
||||
protected BufferedImage small;
|
||||
protected final BufferedImage image = new BufferedImage(FRAME_MAX_WIDTH, FRAME_MAX_HEIGHT, BufferedImage.TYPE_INT_RGB);
|
||||
protected final BufferedImage small;
|
||||
protected String backgroundName;
|
||||
|
||||
// if this is set, it's opened if the user right clicks on the card panel
|
||||
|
@ -182,7 +149,7 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
gImage.setColor(Color.BLACK);
|
||||
gImage.drawImage(background, 0, 0, this);
|
||||
|
||||
if (card.getManaCost().size() > 0) {
|
||||
if (!card.getManaCost().isEmpty()) {
|
||||
ImageHelper.drawCosts(card.getManaCost(), gImage, FRAME_MAX_WIDTH - SYMBOL_MAX_XOFFSET, SYMBOL_MAX_YOFFSET, this);
|
||||
}
|
||||
|
||||
|
@ -191,28 +158,28 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
gSmall.drawImage(ImageHelper.scaleImage(image, Config.dimensions.frameWidth, Config.dimensions.frameHeight), 0, 0, this);
|
||||
|
||||
gImage.setFont(new Font("Arial", Font.PLAIN, NAME_FONT_MAX_SIZE));
|
||||
gImage.drawString(card.getName(), CONTENT_MAX_XOFFSET, NAME_MAX_YOFFSET);
|
||||
if (card.getCardTypes().contains(CardType.CREATURE)) {
|
||||
gImage.drawString(card.getPower() + "/" + card.getToughness(), POWBOX_TEXT_MAX_LEFT, POWBOX_TEXT_MAX_TOP);
|
||||
} else if (card.getCardTypes().contains(CardType.PLANESWALKER)) {
|
||||
gImage.drawString(card.getName()+"TEST", CONTENT_MAX_XOFFSET, NAME_MAX_YOFFSET);
|
||||
if (card.isCreature()) {
|
||||
gImage.drawString(card.getPower() + '/' + card.getToughness(), POWBOX_TEXT_MAX_LEFT, POWBOX_TEXT_MAX_TOP);
|
||||
} else if (card.isPlanesWalker()) {
|
||||
gImage.drawString(card.getLoyalty(), POWBOX_TEXT_MAX_LEFT, POWBOX_TEXT_MAX_TOP);
|
||||
}
|
||||
|
||||
if (card.getCardTypes().size() > 0) {
|
||||
if (!card.getCardTypes().isEmpty()) {
|
||||
gImage.drawString(cardType, CONTENT_MAX_XOFFSET, TYPE_MAX_YOFFSET);
|
||||
}
|
||||
|
||||
gImage.dispose();
|
||||
|
||||
gSmall.setFont(new Font("Arial", Font.PLAIN, Config.dimensions.nameFontSize));
|
||||
gSmall.drawString(card.getName(), Config.dimensions.contentXOffset, Config.dimensions.nameYOffset);
|
||||
if (card.getCardTypes().contains(CardType.CREATURE)) {
|
||||
gSmall.drawString(card.getPower() + "/" + card.getToughness(), Config.dimensions.powBoxTextLeft, Config.dimensions.powBoxTextTop);
|
||||
} else if (card.getCardTypes().contains(CardType.PLANESWALKER)) {
|
||||
gSmall.drawString(card.getName()+"TEST2", Config.dimensions.contentXOffset, Config.dimensions.nameYOffset);
|
||||
if (card.isCreature()) {
|
||||
gSmall.drawString(card.getPower() + "/-/" + card.getToughness(), Config.dimensions.powBoxTextLeft, Config.dimensions.powBoxTextTop);
|
||||
} else if (card.isPlanesWalker()) {
|
||||
gSmall.drawString(card.getLoyalty(), Config.dimensions.powBoxTextLeft, Config.dimensions.powBoxTextTop);
|
||||
}
|
||||
|
||||
if (card.getCardTypes().size() > 0) {
|
||||
if (!card.getCardTypes().isEmpty()) {
|
||||
gSmall.drawString(cardType, Config.dimensions.contentXOffset, Config.dimensions.typeYOffset);
|
||||
}
|
||||
drawText();
|
||||
|
@ -221,7 +188,7 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
}
|
||||
|
||||
@Override
|
||||
public void updateImage() {
|
||||
public void updateArtImage() {
|
||||
|
||||
}
|
||||
|
||||
|
@ -229,27 +196,27 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
StringBuilder sb = new StringBuilder();
|
||||
if (card instanceof StackAbilityView || card instanceof AbilityView) {
|
||||
for (String rule : getRules()) {
|
||||
sb.append("\n").append(rule);
|
||||
sb.append('\n').append(rule);
|
||||
}
|
||||
} else {
|
||||
sb.append(card.getName());
|
||||
if (card.getManaCost().size() > 0) {
|
||||
sb.append("\n").append(card.getManaCost());
|
||||
if (!card.getManaCost().isEmpty()) {
|
||||
sb.append('\n').append(card.getManaCost());
|
||||
}
|
||||
sb.append("\n").append(cardType);
|
||||
sb.append('\n').append(cardType);
|
||||
if (card.getColor().hasColor()) {
|
||||
sb.append("\n").append(card.getColor().toString());
|
||||
sb.append('\n').append(card.getColor().toString());
|
||||
}
|
||||
if (card.getCardTypes().contains(CardType.CREATURE)) {
|
||||
sb.append("\n").append(card.getPower()).append("/").append(card.getToughness());
|
||||
} else if (card.getCardTypes().contains(CardType.PLANESWALKER)) {
|
||||
sb.append("\n").append(card.getLoyalty());
|
||||
if (card.isCreature()) {
|
||||
sb.append('\n').append(card.getPower()).append('/').append(card.getToughness());
|
||||
} else if (card.isPlanesWalker()) {
|
||||
sb.append('\n').append(card.getLoyalty());
|
||||
}
|
||||
for (String rule : getRules()) {
|
||||
sb.append("\n").append(rule);
|
||||
sb.append('\n').append(rule);
|
||||
}
|
||||
if (card.getExpansionSetCode() != null && card.getExpansionSetCode().length() > 0) {
|
||||
sb.append("\n").append(card.getCardNumber()).append(" - ");
|
||||
if (card.getExpansionSetCode() != null && !card.getExpansionSetCode().isEmpty()) {
|
||||
sb.append('\n').append(card.getCardNumber()).append(" - ");
|
||||
sb.append(Sets.getInstance().get(card.getExpansionSetCode()).getName()).append(" - ");
|
||||
sb.append(card.getRarity().toString());
|
||||
}
|
||||
|
@ -263,9 +230,9 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
return "effect";
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (card.getCardTypes().contains(CardType.LAND)) {
|
||||
if (card.isLand()) {
|
||||
sb.append("land").append(card.getSuperTypes()).append(card.getSubTypes());
|
||||
} else if (card.getCardTypes() != null && (card.getCardTypes().contains(CardType.CREATURE) || card.getCardTypes().contains(CardType.PLANESWALKER))) {
|
||||
} else if (card.getCardTypes() != null && (card.isCreature() || card.isPlanesWalker())) {
|
||||
sb.append("creature");
|
||||
}
|
||||
sb.append(card.getColor()).append(card.getRarity()).append(card.getExpansionSetCode());
|
||||
|
@ -278,7 +245,7 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
|
||||
try {
|
||||
for (String rule : getRules()) {
|
||||
doc.insertString(doc.getLength(), rule + "\n", doc.getStyle("small"));
|
||||
doc.insertString(doc.getLength(), rule + '\n', doc.getStyle("small"));
|
||||
}
|
||||
} catch (BadLocationException e) {
|
||||
}
|
||||
|
@ -301,23 +268,36 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
protected String getType(CardView card) {
|
||||
StringBuilder sbType = new StringBuilder();
|
||||
|
||||
for (String superType : card.getSuperTypes()) {
|
||||
sbType.append(superType).append(" ");
|
||||
for (SuperType superType : card.getSuperTypes()) {
|
||||
sbType.append(superType).append(' ');
|
||||
}
|
||||
|
||||
for (CardType cardType : card.getCardTypes()) {
|
||||
sbType.append(cardType.toString()).append(" ");
|
||||
sbType.append(cardType.toString()).append(' ');
|
||||
}
|
||||
|
||||
if (card.getSubTypes().size() > 0) {
|
||||
if (!card.getSubTypes().isEmpty()) {
|
||||
sbType.append("- ");
|
||||
for (String subType : card.getSubTypes()) {
|
||||
sbType.append(subType).append(" ");
|
||||
for (SubType subType : card.getSubTypes()) {
|
||||
sbType.append(subType).append(' ');
|
||||
}
|
||||
}
|
||||
|
||||
return sbType.toString();
|
||||
}
|
||||
|
||||
protected void drawDetailed(Graphics2D g) {
|
||||
// Get the size of the card
|
||||
int width = getWidth();
|
||||
int height = getHeight();
|
||||
|
||||
g.setColor(Color.black);
|
||||
g.drawRoundRect(0, 0, width, height, 4, 4);
|
||||
g.setColor(Color.white);
|
||||
g.setFont(new Font("Arial", Font.PLAIN, NAME_FONT_MAX_SIZE));
|
||||
g.drawString(card.getName(), 0, 0);
|
||||
Logger.getLogger(Card.class).info("Drawing");
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
|
@ -355,6 +335,8 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
|
||||
@Override
|
||||
public void paintComponent(Graphics graphics) {
|
||||
drawDetailed((Graphics2D)graphics);
|
||||
/*
|
||||
Graphics2D g2 = (Graphics2D) graphics;
|
||||
g2.drawImage(small, 0, 0, this);
|
||||
|
||||
|
@ -365,6 +347,7 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
g2.setColor(Color.BLACK);
|
||||
}
|
||||
g2.drawRect(0, 0, Config.dimensions.frameWidth - 1, Config.dimensions.frameHeight - 1);
|
||||
*/
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -384,7 +367,7 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
requestFocusInWindow();
|
||||
callback.mouseClicked(e, gameId, session, card);
|
||||
DefaultActionCallback.instance.mouseClicked(gameId, card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -440,6 +423,7 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
tooltipShowing = false;
|
||||
ArrowBuilder.getBuilder().removeArrowsByType(gameId, ArrowBuilder.Type.TARGET);
|
||||
ArrowBuilder.getBuilder().removeArrowsByType(gameId, ArrowBuilder.Type.PAIRED);
|
||||
ArrowBuilder.getBuilder().removeArrowsByType(gameId, ArrowBuilder.Type.BANDED);
|
||||
ArrowBuilder.getBuilder().removeArrowsByType(gameId, ArrowBuilder.Type.SOURCE);
|
||||
ArrowBuilder.getBuilder().removeArrowsByType(gameId, ArrowBuilder.Type.ENCHANT_PLAYERS);
|
||||
}
|
||||
|
@ -579,7 +563,7 @@ public class Card extends MagePermanent implements MouseMotionListener, MouseLis
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setTextOffset(int yOffset) {
|
||||
public void setCardCaptionTopOffset(int yOffsetPercent) {
|
||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||
}
|
||||
|
||||
|
|
|
@ -27,20 +27,9 @@
|
|||
*/
|
||||
package mage.client.cards;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import javax.swing.JLayeredPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.JScrollPane;
|
||||
import mage.cards.MageCard;
|
||||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.client.util.ClientEventType;
|
||||
import mage.client.util.Event;
|
||||
import mage.client.util.GUISizeHelper;
|
||||
import mage.client.util.Listener;
|
||||
|
@ -50,14 +39,21 @@ import mage.view.CardsView;
|
|||
import mage.view.SimpleCardView;
|
||||
import org.mage.card.arcane.CardPanel;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class CardArea extends JPanel implements MouseListener {
|
||||
|
||||
protected CardEventSource cardEventSource = new CardEventSource();
|
||||
protected final CardEventSource cardEventSource = new CardEventSource();
|
||||
|
||||
private boolean reloaded = false;
|
||||
private final javax.swing.JLayeredPane cardArea;
|
||||
private final javax.swing.JScrollPane scrollPane;
|
||||
private int yTextOffset;
|
||||
private int yCardCaptionOffsetPercent = 0; // card caption offset (use for moving card caption view center, below mana icons -- for more good UI)
|
||||
private Dimension cardDimension;
|
||||
private int verticalCardOffset;
|
||||
|
||||
|
@ -72,8 +68,6 @@ public class CardArea extends JPanel implements MouseListener {
|
|||
setGUISize();
|
||||
cardArea = new JLayeredPane();
|
||||
scrollPane.setViewportView(cardArea);
|
||||
yTextOffset = 10;
|
||||
|
||||
}
|
||||
|
||||
public void cleanUp() {
|
||||
|
@ -89,7 +83,7 @@ public class CardArea extends JPanel implements MouseListener {
|
|||
setGUISize();
|
||||
for (Component component : cardArea.getComponents()) {
|
||||
if (component instanceof CardPanel) {
|
||||
((CardPanel) component).setBounds(0, 0, cardDimension.width, cardDimension.height);
|
||||
component.setBounds(0, 0, cardDimension.width, cardDimension.height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -107,10 +101,10 @@ public class CardArea extends JPanel implements MouseListener {
|
|||
this.reloaded = true;
|
||||
cardArea.removeAll();
|
||||
if (showCards != null && showCards.size() < 10) {
|
||||
yTextOffset = 10;
|
||||
yCardCaptionOffsetPercent = 8; // TODO: need to test
|
||||
loadCardsFew(showCards, bigCard, gameId);
|
||||
} else {
|
||||
yTextOffset = 0;
|
||||
yCardCaptionOffsetPercent = 0;
|
||||
loadCardsMany(showCards, bigCard, gameId);
|
||||
}
|
||||
cardArea.revalidate();
|
||||
|
@ -122,8 +116,10 @@ public class CardArea extends JPanel implements MouseListener {
|
|||
public void loadCardsNarrow(CardsView showCards, BigCard bigCard, UUID gameId) {
|
||||
this.reloaded = true;
|
||||
cardArea.removeAll();
|
||||
yTextOffset = 0;
|
||||
|
||||
yCardCaptionOffsetPercent = 0; // TODO: need to test
|
||||
loadCardsMany(showCards, bigCard, gameId);
|
||||
|
||||
cardArea.revalidate();
|
||||
|
||||
this.revalidate();
|
||||
|
@ -148,7 +144,7 @@ public class CardArea extends JPanel implements MouseListener {
|
|||
tmp.setAbility(card); // cross-reference, required for ability picker
|
||||
card = tmp;
|
||||
}
|
||||
MageCard cardPanel = Plugins.getInstance().getMageCard(card, bigCard, cardDimension, gameId, true);
|
||||
MageCard cardPanel = Plugins.instance.getMageCard(card, bigCard, cardDimension, gameId, true, true);
|
||||
|
||||
cardPanel.setBounds(rectangle);
|
||||
cardPanel.addMouseListener(this);
|
||||
|
@ -156,14 +152,17 @@ public class CardArea extends JPanel implements MouseListener {
|
|||
cardArea.moveToFront(cardPanel);
|
||||
cardPanel.update(card);
|
||||
cardPanel.setCardBounds(rectangle.x, rectangle.y, cardDimension.width, cardDimension.height);
|
||||
cardPanel.setTextOffset(yTextOffset);
|
||||
|
||||
// new card have same settings as current view
|
||||
cardPanel.setCardCaptionTopOffset(yCardCaptionOffsetPercent);
|
||||
|
||||
cardPanel.showCardTitle();
|
||||
}
|
||||
|
||||
private void loadCardsMany(CardsView showCards, BigCard bigCard, UUID gameId) {
|
||||
int rowsOfCards = 20;
|
||||
int columns = 1;
|
||||
if (showCards != null && showCards.size() > 0) {
|
||||
if (showCards != null && !showCards.isEmpty()) {
|
||||
Rectangle rectangle = new Rectangle(cardDimension.width, cardDimension.height);
|
||||
int count = 0;
|
||||
for (CardView card : showCards.values()) {
|
||||
|
@ -240,15 +239,15 @@ public class CardArea extends JPanel implements MouseListener {
|
|||
e.consume();
|
||||
if (obj instanceof Card) {
|
||||
if (e.isAltDown()) {
|
||||
cardEventSource.altDoubleClick(((Card) obj).getOriginal(), "alt-double-click");
|
||||
cardEventSource.fireEvent(((Card) obj).getOriginal(), ClientEventType.ALT_DOUBLE_CLICK);
|
||||
} else {
|
||||
cardEventSource.doubleClick(((Card) obj).getOriginal(), "double-click");
|
||||
cardEventSource.fireEvent(((Card) obj).getOriginal(), ClientEventType.DOUBLE_CLICK);
|
||||
}
|
||||
} else if (obj instanceof MageCard) {
|
||||
if (e.isAltDown()) {
|
||||
cardEventSource.altDoubleClick(((MageCard) obj).getOriginal(), "alt-double-click");
|
||||
cardEventSource.fireEvent(((MageCard) obj).getOriginal(), ClientEventType.ALT_DOUBLE_CLICK);
|
||||
} else {
|
||||
cardEventSource.doubleClick(((MageCard) obj).getOriginal(), "double-click");
|
||||
cardEventSource.fireEvent(((MageCard) obj).getOriginal(),ClientEventType.DOUBLE_CLICK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -270,14 +269,14 @@ public class CardArea extends JPanel implements MouseListener {
|
|||
checkMenu(e, null);
|
||||
}
|
||||
} else {
|
||||
cardEventSource.actionConsumedEvent("action-consumed");
|
||||
cardEventSource.fireEvent(ClientEventType.ACTION_CONSUMED);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkMenu(MouseEvent Me, SimpleCardView card) {
|
||||
if (Me.isPopupTrigger()) {
|
||||
Me.consume();
|
||||
cardEventSource.showPopupMenuEvent(card, Me.getComponent(), Me.getX(), Me.getY(), "show-popup-menu");
|
||||
cardEventSource.fireEvent(card, Me.getComponent(), Me.getX(), Me.getY(), ClientEventType.SHOW_POP_UP_MENU);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,176 @@
|
|||
package mage.client.cards;
|
||||
|
||||
import mage.cards.MageCard;
|
||||
import mage.client.MagePane;
|
||||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.view.CardView;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.awt.event.MouseMotionListener;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by StravantUser on 2016-09-22.
|
||||
*/
|
||||
public class CardDraggerGlassPane implements MouseListener, MouseMotionListener {
|
||||
private final DragCardSource source;
|
||||
private Component dragComponent;
|
||||
private JRootPane currentRoot;
|
||||
private JComponent glassPane;
|
||||
private ArrayList<CardView> currentCards;
|
||||
private MageCard dragView;
|
||||
private DragCardTarget currentDragTarget;
|
||||
private boolean isDragging;
|
||||
|
||||
// This should not be strictly needed, but for some reason I can't figure out getDeepestComponentAt and
|
||||
// getComponentAt do not seem to work correctly for our setup if called on the root MageFrame.
|
||||
private MagePane currentEventRootMagePane;
|
||||
|
||||
public CardDraggerGlassPane(DragCardSource source) {
|
||||
this.source = source;
|
||||
}
|
||||
|
||||
public void beginDrag(Component c, MouseEvent e) {
|
||||
// Start drag
|
||||
if (isDragging) {
|
||||
return;
|
||||
}
|
||||
isDragging = true;
|
||||
|
||||
// Record what we are dragging on
|
||||
dragComponent = c;
|
||||
currentRoot = SwingUtilities.getRootPane(c);
|
||||
|
||||
// Pane
|
||||
glassPane = (JComponent)currentRoot.getGlassPane();
|
||||
glassPane.setLayout(null);
|
||||
glassPane.setOpaque(false);
|
||||
glassPane.setVisible(true);
|
||||
|
||||
// Get root mage pane to handle drag targeting in
|
||||
Component rootMagePane = c;
|
||||
while (rootMagePane != null && !(rootMagePane instanceof MagePane)) {
|
||||
rootMagePane = rootMagePane.getParent();
|
||||
}
|
||||
if (rootMagePane == null) {
|
||||
throw new RuntimeException("CardDraggerGlassPane::beginDrag not in a MagePane?");
|
||||
} else {
|
||||
currentEventRootMagePane = (MagePane)rootMagePane;
|
||||
}
|
||||
|
||||
// Hook up events
|
||||
c.addMouseListener(this);
|
||||
c.addMouseMotionListener(this);
|
||||
|
||||
// Event to local space
|
||||
e = SwingUtilities.convertMouseEvent(c, e, glassPane);
|
||||
|
||||
// Get the cards to drag
|
||||
currentCards = new ArrayList<>(source.dragCardList());
|
||||
|
||||
// Make a view for the first one and add it to us
|
||||
dragView = Plugins.instance.getMageCard(currentCards.get(0), null, new Dimension(100, 140), null, true, false);
|
||||
for (MouseListener l: dragView.getMouseListeners()) {
|
||||
dragView.removeMouseListener(l);
|
||||
}
|
||||
for (MouseMotionListener l : dragView.getMouseMotionListeners()) {
|
||||
dragView.removeMouseMotionListener(l);
|
||||
}
|
||||
dragView.setLocation(e.getX(), e.getY());
|
||||
glassPane.add(dragView);
|
||||
|
||||
// Notify the sounce
|
||||
source.dragCardBegin();
|
||||
|
||||
// Update the target
|
||||
currentDragTarget = null;
|
||||
updateCurrentTarget(SwingUtilities.convertMouseEvent(glassPane, e, currentEventRootMagePane), false);
|
||||
}
|
||||
|
||||
// e is relative to currentRoot
|
||||
private void updateCurrentTarget(MouseEvent e, boolean isEnding) {
|
||||
Component mouseOver = SwingUtilities.getDeepestComponentAt(currentEventRootMagePane, e.getX(), e.getY());
|
||||
while (mouseOver != null) {
|
||||
if (mouseOver instanceof DragCardTarget) {
|
||||
DragCardTarget target = (DragCardTarget)mouseOver;
|
||||
MouseEvent targetEvent = SwingUtilities.convertMouseEvent(currentEventRootMagePane, e, mouseOver);
|
||||
if (target != currentDragTarget) {
|
||||
if (currentDragTarget != null) {
|
||||
MouseEvent oldTargetEvent = SwingUtilities.convertMouseEvent(currentEventRootMagePane, e, (Component) currentDragTarget);
|
||||
currentDragTarget.dragCardExit(oldTargetEvent);
|
||||
}
|
||||
currentDragTarget = target;
|
||||
currentDragTarget.dragCardEnter(targetEvent);
|
||||
}
|
||||
if (isEnding) {
|
||||
currentDragTarget.dragCardExit(targetEvent);
|
||||
currentDragTarget.dragCardDrop(targetEvent, source, currentCards);
|
||||
} else {
|
||||
currentDragTarget.dragCardMove(targetEvent);
|
||||
}
|
||||
return;
|
||||
}
|
||||
mouseOver = mouseOver.getParent();
|
||||
}
|
||||
if (currentDragTarget != null) {
|
||||
MouseEvent oldTargetEvent = SwingUtilities.convertMouseEvent(currentEventRootMagePane, e, (Component)currentDragTarget);
|
||||
currentDragTarget.dragCardExit(oldTargetEvent);
|
||||
}
|
||||
currentDragTarget = null;
|
||||
}
|
||||
|
||||
public boolean isDragging() {
|
||||
return isDragging;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mouse released -> we are done the drag
|
||||
*/
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
// No longer dragging
|
||||
isDragging = false;
|
||||
|
||||
// Remove listeners
|
||||
dragComponent.removeMouseListener(this);
|
||||
dragComponent.removeMouseMotionListener(this);
|
||||
|
||||
// Convert the event into root coords
|
||||
e = SwingUtilities.convertMouseEvent(dragComponent, e, currentEventRootMagePane);
|
||||
|
||||
// Remove the drag card
|
||||
glassPane.remove(dragView);
|
||||
glassPane.repaint();
|
||||
|
||||
// Let the drag source know
|
||||
source.dragCardEnd(currentDragTarget);
|
||||
|
||||
// Update the target, and do the drop
|
||||
updateCurrentTarget(e, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDragged(MouseEvent e) {
|
||||
// Update the view
|
||||
MouseEvent glassE = SwingUtilities.convertMouseEvent(dragComponent, e, glassPane);
|
||||
dragView.setLocation(glassE.getX(), glassE.getY());
|
||||
dragView.repaint();
|
||||
// Convert the event into root coords and update target
|
||||
e = SwingUtilities.convertMouseEvent(dragComponent, e, currentEventRootMagePane);
|
||||
updateCurrentTarget(e, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {}
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {}
|
||||
@Override
|
||||
public void mouseMoved(MouseEvent e) {}
|
||||
}
|
|
@ -27,14 +27,13 @@
|
|||
*/
|
||||
package mage.client.cards;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.io.Serializable;
|
||||
import mage.client.util.*;
|
||||
import mage.client.util.Event;
|
||||
import mage.client.util.EventDispatcher;
|
||||
import mage.client.util.EventSource;
|
||||
import mage.client.util.Listener;
|
||||
import mage.view.SimpleCardView;
|
||||
|
||||
import java.awt.*;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
|
@ -49,34 +48,22 @@ public class CardEventSource implements EventSource<Event>, Serializable {
|
|||
dispatcher.addListener(listener);
|
||||
}
|
||||
|
||||
public void setNumber(SimpleCardView card, String message, int number) {
|
||||
dispatcher.fireEvent(new Event(card, message, number));
|
||||
public void fireEvent(SimpleCardView card, ClientEventType eventType, int number){
|
||||
dispatcher.fireEvent(new Event(card, eventType, number));
|
||||
}
|
||||
|
||||
public void doubleClick(SimpleCardView card, String message) {
|
||||
dispatcher.fireEvent(new Event(card, message));
|
||||
public void fireEvent(ClientEventType eventType){
|
||||
dispatcher.fireEvent(new Event(null, eventType));
|
||||
}
|
||||
|
||||
public void altDoubleClick(SimpleCardView card, String message) {
|
||||
dispatcher.fireEvent(new Event(card, message));
|
||||
public void fireEvent(SimpleCardView card, ClientEventType eventType){
|
||||
dispatcher.fireEvent(new Event(card, eventType));
|
||||
}
|
||||
|
||||
public void removeFromMainEvent(String message) {
|
||||
dispatcher.fireEvent(new Event(null, message));
|
||||
}
|
||||
|
||||
public void removeFromSideboardEvent(String message) {
|
||||
dispatcher.fireEvent(new Event(null, message));
|
||||
}
|
||||
|
||||
public void showPopupMenuEvent(SimpleCardView card, Component component, int x, int y, String message) {
|
||||
public void fireEvent(SimpleCardView card, Component component, int x, int y, ClientEventType message) {
|
||||
dispatcher.fireEvent(new Event(card, message, x, y, component));
|
||||
}
|
||||
|
||||
public void actionConsumedEvent(String message) {
|
||||
dispatcher.fireEvent(new Event(null, message));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearListeners() {
|
||||
dispatcher.clearListeners();
|
||||
|
|
|
@ -33,23 +33,10 @@
|
|||
*/
|
||||
package mage.client.cards;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.UUID;
|
||||
import mage.cards.MageCard;
|
||||
import mage.client.deckeditor.SortSetting;
|
||||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.client.util.ClientEventType;
|
||||
import mage.client.util.Event;
|
||||
import mage.client.util.GUISizeHelper;
|
||||
import mage.client.util.Listener;
|
||||
|
@ -58,13 +45,20 @@ import mage.view.CardView;
|
|||
import mage.view.CardsView;
|
||||
import org.mage.card.arcane.CardPanel;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class CardGrid extends javax.swing.JLayeredPane implements MouseListener, ICardGrid {
|
||||
|
||||
protected CardEventSource cardEventSource = new CardEventSource();
|
||||
protected final CardEventSource cardEventSource = new CardEventSource();
|
||||
protected BigCard bigCard;
|
||||
protected UUID gameId;
|
||||
private final Map<UUID, MageCard> cards = new HashMap<>();
|
||||
|
@ -128,13 +122,12 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
addCard(card, bigCard, gameId, drawImage);
|
||||
}
|
||||
}
|
||||
// System.gc();
|
||||
drawCards(sortSetting);
|
||||
this.setVisible(true);
|
||||
}
|
||||
|
||||
private void addCard(CardView card, BigCard bigCard, UUID gameId, boolean drawImage) {
|
||||
MageCard cardImg = Plugins.getInstance().getMageCard(card, bigCard, cardDimension, gameId, drawImage);
|
||||
MageCard cardImg = Plugins.instance.getMageCard(card, bigCard, cardDimension, gameId, drawImage, true);
|
||||
cards.put(card.getId(), cardImg);
|
||||
cardImg.addMouseListener(this);
|
||||
add(cardImg);
|
||||
|
@ -149,24 +142,27 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
int numColumns = maxWidth / cardDimension.width;
|
||||
int curColumn = 0;
|
||||
int curRow = 0;
|
||||
if (cards.size() > 0) {
|
||||
if (!cards.isEmpty()) {
|
||||
Rectangle rectangle = new Rectangle(cardDimension.width, cardDimension.height);
|
||||
List<MageCard> sortedCards = new ArrayList<>(cards.values());
|
||||
switch (sortSetting.getSortBy()) {
|
||||
case NAME:
|
||||
Collections.sort(sortedCards, new CardNameComparator());
|
||||
sortedCards.sort(new CardNameComparator());
|
||||
break;
|
||||
case CARD_TYPE:
|
||||
sortedCards.sort(new CardTypeComparator());
|
||||
break;
|
||||
case RARITY:
|
||||
Collections.sort(sortedCards, new CardRarityComparator());
|
||||
sortedCards.sort(new CardRarityComparator());
|
||||
break;
|
||||
case COLOR:
|
||||
Collections.sort(sortedCards, new CardColorComparator());
|
||||
sortedCards.sort(new CardColorComparator());
|
||||
break;
|
||||
case COLOR_IDENTITY:
|
||||
Collections.sort(sortedCards, new CardColorDetailedIdentity());
|
||||
sortedCards.sort(new CardColorDetailedIdentity());
|
||||
break;
|
||||
case CASTING_COST:
|
||||
Collections.sort(sortedCards, new CardCostComparator());
|
||||
sortedCards.sort(new CardCostComparator());
|
||||
break;
|
||||
|
||||
}
|
||||
|
@ -183,8 +179,14 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
curRow = 0;
|
||||
}
|
||||
break;
|
||||
case CARD_TYPE:
|
||||
if (!cardImg.getOriginal().getCardTypes().equals(lastCard.getOriginal().getCardTypes())) {
|
||||
curColumn++;
|
||||
curRow = 0;
|
||||
}
|
||||
break;
|
||||
case RARITY:
|
||||
if (!cardImg.getOriginal().getRarity().equals(lastCard.getOriginal().getRarity())) {
|
||||
if (cardImg.getOriginal().getRarity() != lastCard.getOriginal().getRarity()) {
|
||||
curColumn++;
|
||||
curRow = 0;
|
||||
}
|
||||
|
@ -313,15 +315,15 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
Object obj = e.getSource();
|
||||
if (obj instanceof Card) {
|
||||
if (e.isAltDown()) {
|
||||
cardEventSource.altDoubleClick(((Card) obj).getOriginal(), "alt-double-click");
|
||||
cardEventSource.fireEvent(((Card) obj).getOriginal(), ClientEventType.ALT_DOUBLE_CLICK);
|
||||
} else {
|
||||
cardEventSource.doubleClick(((Card) obj).getOriginal(), "double-click");
|
||||
cardEventSource.fireEvent(((Card) obj).getOriginal(), ClientEventType.DOUBLE_CLICK);
|
||||
}
|
||||
} else if (obj instanceof MageCard) {
|
||||
if (e.isAltDown()) {
|
||||
cardEventSource.altDoubleClick(((MageCard) obj).getOriginal(), "alt-double-click");
|
||||
cardEventSource.fireEvent(((MageCard) obj).getOriginal(), ClientEventType.ALT_DOUBLE_CLICK);
|
||||
} else {
|
||||
cardEventSource.doubleClick(((MageCard) obj).getOriginal(), "double-click");
|
||||
cardEventSource.fireEvent(((MageCard) obj).getOriginal(), ClientEventType.DOUBLE_CLICK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -400,7 +402,7 @@ class CardCostComparator implements Comparator<MageCard> {
|
|||
|
||||
@Override
|
||||
public int compare(MageCard o1, MageCard o2) {
|
||||
int val = Integer.valueOf(o1.getOriginal().getConvertedManaCost()).compareTo(Integer.valueOf(o2.getOriginal().getConvertedManaCost()));
|
||||
int val = Integer.valueOf(o1.getOriginal().getConvertedManaCost()).compareTo(o2.getOriginal().getConvertedManaCost());
|
||||
if (val == 0) {
|
||||
return o1.getOriginal().getName().compareTo(o2.getOriginal().getName());
|
||||
} else {
|
||||
|
@ -438,3 +440,17 @@ class CardColorDetailedIdentity implements Comparator<MageCard> {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
class CardTypeComparator implements Comparator<MageCard> {
|
||||
|
||||
@Override
|
||||
public int compare(MageCard o1, MageCard o2) {
|
||||
int val = o1.getOriginal().getCardTypes().toString().compareTo(o2.getOriginal().getCardTypes().toString());
|
||||
if (val == 0) {
|
||||
return o1.getOriginal().getName().compareTo(o2.getOriginal().getName());
|
||||
} else {
|
||||
return val;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -37,8 +37,6 @@ import java.awt.Color;
|
|||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
@ -100,7 +98,7 @@ public class Cards extends javax.swing.JPanel {
|
|||
jScrollPane1.getViewport().setOpaque(false);
|
||||
jScrollPane1.setBorder(EMPTY_BORDER);
|
||||
}
|
||||
if (Plugins.getInstance().isCardPluginLoaded()) {
|
||||
if (Plugins.instance.isCardPluginLoaded()) {
|
||||
cardArea.setLayout(null);
|
||||
}
|
||||
cardArea.setBorder(EMPTY_BORDER);
|
||||
|
@ -114,7 +112,7 @@ public class Cards extends javax.swing.JPanel {
|
|||
setGUISize();
|
||||
for (MageCard mageCard : cards.values()) {
|
||||
mageCard.setCardBounds(0, 0, getCardDimension().width, getCardDimension().height);
|
||||
mageCard.updateImage();
|
||||
mageCard.updateArtImage();
|
||||
mageCard.doLayout();
|
||||
}
|
||||
layoutCards();
|
||||
|
@ -210,7 +208,7 @@ public class Cards extends javax.swing.JPanel {
|
|||
tmp.setIsAbility(true);
|
||||
tmp.overrideTargets(card.getTargets());
|
||||
tmp.overrideId(card.getId());
|
||||
tmp.setAbilityType(((StackAbilityView) card).getAbilityType());
|
||||
tmp.setAbilityType(card.getAbilityType());
|
||||
card = tmp;
|
||||
} else {
|
||||
card.setAbilityType(null);
|
||||
|
@ -227,7 +225,7 @@ public class Cards extends javax.swing.JPanel {
|
|||
}
|
||||
|
||||
if (!isVisibleIfEmpty) {
|
||||
cardArea.setVisible(cards.size() > 0);
|
||||
cardArea.setVisible(!cards.isEmpty());
|
||||
}
|
||||
|
||||
sizeCards(getCardDimension());
|
||||
|
@ -258,14 +256,14 @@ public class Cards extends javax.swing.JPanel {
|
|||
this.cardDimension = dimension;
|
||||
for (Component component : cardArea.getComponents()) {
|
||||
if (component instanceof CardPanel) {
|
||||
((CardPanel) component).setBounds(0, 0, dimension.width, dimension.height);
|
||||
component.setBounds(0, 0, dimension.width, dimension.height);
|
||||
}
|
||||
}
|
||||
layoutCards();
|
||||
}
|
||||
|
||||
private void addCard(CardView card, BigCard bigCard, UUID gameId) {
|
||||
MageCard mageCard = Plugins.getInstance().getMageCard(card, bigCard, getCardDimension(), gameId, true);
|
||||
MageCard mageCard = Plugins.instance.getMageCard(card, bigCard, getCardDimension(), gameId, true, true);
|
||||
if (zone != null) {
|
||||
mageCard.setZone(zone);
|
||||
}
|
||||
|
@ -358,12 +356,7 @@ public class Cards extends javax.swing.JPanel {
|
|||
}
|
||||
}
|
||||
// sort the cards
|
||||
Collections.sort(cardsToLayout, new Comparator<CardPanel>() {
|
||||
@Override
|
||||
public int compare(CardPanel cp1, CardPanel cp2) {
|
||||
return Integer.valueOf(cp1.getLocation().x).compareTo(cp2.getLocation().x);
|
||||
}
|
||||
});
|
||||
cardsToLayout.sort((cp1, cp2) -> Integer.valueOf(cp1.getLocation().x).compareTo(cp2.getLocation().x));
|
||||
// relocate the cards
|
||||
int dx = 0;
|
||||
for (Component component : cardsToLayout) {
|
||||
|
|
|
@ -34,21 +34,16 @@
|
|||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="panelControl" pref="703" max="32767" attributes="0"/>
|
||||
<Component id="panelCardArea" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
<Component id="panelControl" alignment="0" pref="467" max="32767" attributes="0"/>
|
||||
<Component id="panelCardArea" alignment="0" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<Component id="panelControl" min="-2" pref="25" max="-2" attributes="0"/>
|
||||
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
|
||||
<Component id="panelCardArea" pref="86" max="32767" attributes="0"/>
|
||||
<Component id="panelControl" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace min="-2" pref="2" max="-2" attributes="0"/>
|
||||
<Component id="panelCardArea" pref="179" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
|
@ -81,15 +76,7 @@
|
|||
<Component id="lblLandCount" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="lblCreatureCount" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="lblSorceryCount" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="lblInstantCount" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="lblEnchantmentCount" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace min="-2" pref="4" max="-2" attributes="0"/>
|
||||
<Component id="lblArtifactCount" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||
<Component id="chkPiles" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||
<Component id="cbSortBy" min="-2" max="-2" attributes="0"/>
|
||||
|
@ -97,7 +84,7 @@
|
|||
<Component id="jToggleListView" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jToggleCardView" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace min="0" pref="62" max="32767" attributes="0"/>
|
||||
<EmptySpace max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
|
@ -109,11 +96,7 @@
|
|||
<Component id="lblCount" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="lblLandCount" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="lblCreatureCount" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="lblSorceryCount" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="lblInstantCount" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="lblEnchantmentCount" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="chkPiles" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="lblArtifactCount" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<Component id="cbSortBy" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jToggleListView" min="-2" max="-2" attributes="0"/>
|
||||
|
@ -177,60 +160,6 @@
|
|||
<Property name="verifyInputWhenFocusTarget" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblSorceryCount">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="2"/>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/buttons/type_sorcery.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="999"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Number of sorceries."/>
|
||||
<Property name="verticalAlignment" type="int" value="1"/>
|
||||
<Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
|
||||
<Color id="Default Cursor"/>
|
||||
</Property>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="inheritsPopupMenu" type="boolean" value="false"/>
|
||||
<Property name="requestFocusEnabled" type="boolean" value="false"/>
|
||||
<Property name="verifyInputWhenFocusTarget" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblInstantCount">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="2"/>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/buttons/type_instant.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="999"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Number of instants."/>
|
||||
<Property name="verticalAlignment" type="int" value="1"/>
|
||||
<Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
|
||||
<Color id="Default Cursor"/>
|
||||
</Property>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="inheritsPopupMenu" type="boolean" value="false"/>
|
||||
<Property name="requestFocusEnabled" type="boolean" value="false"/>
|
||||
<Property name="verifyInputWhenFocusTarget" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblEnchantmentCount">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="2"/>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/buttons/type_enchantment.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="999"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Number of enchantments."/>
|
||||
<Property name="verticalAlignment" type="int" value="1"/>
|
||||
<Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
|
||||
<Color id="Default Cursor"/>
|
||||
</Property>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="inheritsPopupMenu" type="boolean" value="false"/>
|
||||
<Property name="requestFocusEnabled" type="boolean" value="false"/>
|
||||
<Property name="verifyInputWhenFocusTarget" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JCheckBox" name="chkPiles">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Piles"/>
|
||||
|
@ -324,24 +253,6 @@
|
|||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jToggleCardViewActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="lblArtifactCount">
|
||||
<Properties>
|
||||
<Property name="horizontalAlignment" type="int" value="2"/>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/buttons/type_artifact.png"/>
|
||||
</Property>
|
||||
<Property name="text" type="java.lang.String" value="999"/>
|
||||
<Property name="toolTipText" type="java.lang.String" value="Number of artifacts"/>
|
||||
<Property name="verticalAlignment" type="int" value="1"/>
|
||||
<Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
|
||||
<Color id="Default Cursor"/>
|
||||
</Property>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="inheritsPopupMenu" type="boolean" value="false"/>
|
||||
<Property name="requestFocusEnabled" type="boolean" value="false"/>
|
||||
<Property name="verifyInputWhenFocusTarget" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JScrollPane" name="panelCardArea">
|
||||
|
|
|
@ -33,26 +33,6 @@
|
|||
*/
|
||||
package mage.client.cards;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.beans.Beans;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.table.DefaultTableCellRenderer;
|
||||
import javax.swing.table.TableColumn;
|
||||
import javax.swing.table.TableColumnModel;
|
||||
import mage.cards.MageCard;
|
||||
import mage.client.constants.Constants.DeckEditorMode;
|
||||
import mage.client.constants.Constants.SortBy;
|
||||
|
@ -61,28 +41,33 @@ import mage.client.deckeditor.table.TableModel;
|
|||
import mage.client.deckeditor.table.UpdateCountsCallback;
|
||||
import mage.client.dialog.PreferencesDialog;
|
||||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.client.util.CardViewColorComparator;
|
||||
import mage.client.util.CardViewColorIdentityComparator;
|
||||
import mage.client.util.CardViewCostComparator;
|
||||
import mage.client.util.CardViewNameComparator;
|
||||
import mage.client.util.CardViewRarityComparator;
|
||||
import mage.client.util.*;
|
||||
import mage.client.util.Event;
|
||||
import mage.client.util.GUISizeHelper;
|
||||
import mage.client.util.Listener;
|
||||
import mage.client.util.gui.TableSpinnerEditor;
|
||||
import mage.constants.CardType;
|
||||
import mage.view.CardView;
|
||||
import mage.view.CardsView;
|
||||
import mage.view.SimpleCardView;
|
||||
import org.mage.card.arcane.CardPanel;
|
||||
import org.mage.card.arcane.ManaSymbolsCellRenderer;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.DefaultTableCellRenderer;
|
||||
import javax.swing.table.TableColumn;
|
||||
import javax.swing.table.TableColumnModel;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.beans.Beans;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class CardsList extends javax.swing.JPanel implements MouseListener, ICardGrid {
|
||||
|
||||
protected CardEventSource cardEventSource = new CardEventSource();
|
||||
protected final CardEventSource cardEventSource = new CardEventSource();
|
||||
private Dimension cardDimension;
|
||||
private int rowHeight;
|
||||
private CardsView cards;
|
||||
|
@ -180,6 +165,9 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
mainTable.getColumnModel().getColumn(6).setPreferredWidth(15);
|
||||
mainTable.getColumnModel().getColumn(7).setPreferredWidth(15);
|
||||
|
||||
// new mana render (svg support)
|
||||
mainTable.getColumnModel().getColumn(mainModel.COLUMN_INDEX_COST).setCellRenderer(new ManaSymbolsCellRenderer());
|
||||
|
||||
if (PreferencesDialog.getCachedValue(PreferencesDialog.KEY_DRAFT_VIEW, "cardView").equals("listView")) {
|
||||
jToggleListView.setSelected(true);
|
||||
panelCardArea.setViewportView(mainTable);
|
||||
|
@ -211,12 +199,12 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
}
|
||||
});
|
||||
|
||||
mainModel.setUpdateCountsCallback(new UpdateCountsCallback(lblCount, lblCreatureCount, lblLandCount, lblSorceryCount, lblInstantCount, lblEnchantmentCount, lblArtifactCount));
|
||||
mainModel.setUpdateCountsCallback(new UpdateCountsCallback(lblCount, lblCreatureCount, lblLandCount, null, null, null, null));
|
||||
}
|
||||
|
||||
// if you use the deck ediot to build a free deck, numbers can be set directly in deck and sideboard
|
||||
public void setDeckEditorMode(DeckEditorMode mode) {
|
||||
if (mode.equals(DeckEditorMode.FREE_BUILDING)) {
|
||||
if (mode == DeckEditorMode.FREE_BUILDING) {
|
||||
// activate spinner for card number change
|
||||
mainModel.setNumberEditable(true);
|
||||
TableColumnModel tcm = mainTable.getColumnModel();
|
||||
|
@ -321,7 +309,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
cardArea.remove(card);
|
||||
}
|
||||
|
||||
if (cards != null && cards.size() > 0) {
|
||||
if (cards != null && !cards.isEmpty()) {
|
||||
Rectangle rectangle = new Rectangle(cardDimension.width, cardDimension.height);
|
||||
List<CardView> sortedCards = new ArrayList<>(cards.values());
|
||||
switch (sortSetting.getSortBy()) {
|
||||
|
@ -331,6 +319,9 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
case RARITY:
|
||||
comparator = new CardViewRarityComparator();
|
||||
break;
|
||||
case CARD_TYPE:
|
||||
comparator = new CardViewCardTypeComparator();
|
||||
break;
|
||||
case COLOR:
|
||||
comparator = new CardViewColorComparator();
|
||||
break;
|
||||
|
@ -342,8 +333,8 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
break;
|
||||
}
|
||||
if (comparator != null) {
|
||||
Collections.sort(sortedCards, new CardViewNameComparator());
|
||||
Collections.sort(sortedCards, comparator);
|
||||
sortedCards.sort(new CardViewNameComparator());
|
||||
sortedCards.sort(comparator);
|
||||
}
|
||||
CardView lastCard = null;
|
||||
for (CardView card : sortedCards) {
|
||||
|
@ -392,24 +383,24 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
int instantCount = 0;
|
||||
int enchantmentCount = 0;
|
||||
int artifactCount = 0;
|
||||
|
||||
|
||||
for (CardView card : cards.values()) {
|
||||
if (card.getCardTypes().contains(CardType.LAND)) {
|
||||
if (card.isLand()) {
|
||||
landCount++;
|
||||
}
|
||||
if (card.getCardTypes().contains(CardType.CREATURE)) {
|
||||
if (card.isCreature()) {
|
||||
creatureCount++;
|
||||
}
|
||||
if (card.getCardTypes().contains(CardType.SORCERY)) {
|
||||
if (card.isSorcery()) {
|
||||
sorceryCount++;
|
||||
}
|
||||
if (card.getCardTypes().contains(CardType.INSTANT)) {
|
||||
if (card.isInstant()) {
|
||||
instantCount++;
|
||||
}
|
||||
if (card.getCardTypes().contains(CardType.ENCHANTMENT)) {
|
||||
if (card.isEnchantment()) {
|
||||
enchantmentCount++;
|
||||
}
|
||||
if (card.getCardTypes().contains(CardType.ARTIFACT)) {
|
||||
if (card.isArtifact()) {
|
||||
artifactCount++;
|
||||
}
|
||||
}
|
||||
|
@ -418,14 +409,10 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
this.lblCount.setText(Integer.toString(count));
|
||||
this.lblCreatureCount.setText(Integer.toString(creatureCount));
|
||||
this.lblLandCount.setText(Integer.toString(landCount));
|
||||
this.lblSorceryCount.setText(Integer.toString(sorceryCount));
|
||||
this.lblInstantCount.setText(Integer.toString(instantCount));
|
||||
this.lblEnchantmentCount.setText(Integer.toString(enchantmentCount));
|
||||
this.lblArtifactCount.setText(Integer.toString(artifactCount));
|
||||
}
|
||||
|
||||
private MageCard addCard(CardView card, BigCard bigCard, UUID gameId) {
|
||||
MageCard cardImg = Plugins.getInstance().getMageCard(card, bigCard, cardDimension, gameId, true);
|
||||
MageCard cardImg = Plugins.instance.getMageCard(card, bigCard, cardDimension, gameId, true, true);
|
||||
cardArea.add(cardImg);
|
||||
cardImg.update(card);
|
||||
cardImg.addMouseListener(this);
|
||||
|
@ -482,22 +469,18 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
lblCount = new javax.swing.JLabel();
|
||||
lblLandCount = new javax.swing.JLabel();
|
||||
lblCreatureCount = new javax.swing.JLabel();
|
||||
lblSorceryCount = new javax.swing.JLabel();
|
||||
lblInstantCount = new javax.swing.JLabel();
|
||||
lblEnchantmentCount = new javax.swing.JLabel();
|
||||
chkPiles = new javax.swing.JCheckBox();
|
||||
cbSortBy = new javax.swing.JComboBox();
|
||||
jToggleListView = new javax.swing.JToggleButton();
|
||||
jToggleCardView = new javax.swing.JToggleButton();
|
||||
lblArtifactCount = new javax.swing.JLabel();
|
||||
panelCardArea = new javax.swing.JScrollPane();
|
||||
cardArea = new javax.swing.JLayeredPane();
|
||||
|
||||
setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
|
||||
setMinimumSize(new java.awt.Dimension(30, 30));
|
||||
setPreferredSize((!Beans.isDesignTime())?
|
||||
(GUISizeHelper.editorCardDimension)
|
||||
:(new Dimension(600, 600)));
|
||||
setPreferredSize((!Beans.isDesignTime()) ?
|
||||
(GUISizeHelper.editorCardDimension)
|
||||
: (new Dimension(600, 600)));
|
||||
setRequestFocusEnabled(false);
|
||||
|
||||
panelControl.setMaximumSize(new java.awt.Dimension(32767, 23));
|
||||
|
@ -537,60 +520,19 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
lblCreatureCount.setRequestFocusEnabled(false);
|
||||
lblCreatureCount.setVerifyInputWhenFocusTarget(false);
|
||||
|
||||
lblSorceryCount.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
|
||||
lblSorceryCount.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_sorcery.png"))); // NOI18N
|
||||
lblSorceryCount.setText("999");
|
||||
lblSorceryCount.setToolTipText("Number of sorceries.");
|
||||
lblSorceryCount.setVerticalAlignment(javax.swing.SwingConstants.TOP);
|
||||
lblSorceryCount.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
|
||||
lblSorceryCount.setFocusable(false);
|
||||
lblSorceryCount.setInheritsPopupMenu(false);
|
||||
lblSorceryCount.setRequestFocusEnabled(false);
|
||||
lblSorceryCount.setVerifyInputWhenFocusTarget(false);
|
||||
|
||||
lblInstantCount.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
|
||||
lblInstantCount.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_instant.png"))); // NOI18N
|
||||
lblInstantCount.setText("999");
|
||||
lblInstantCount.setToolTipText("Number of instants.");
|
||||
lblInstantCount.setVerticalAlignment(javax.swing.SwingConstants.TOP);
|
||||
lblInstantCount.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
|
||||
lblInstantCount.setFocusable(false);
|
||||
lblInstantCount.setInheritsPopupMenu(false);
|
||||
lblInstantCount.setRequestFocusEnabled(false);
|
||||
lblInstantCount.setVerifyInputWhenFocusTarget(false);
|
||||
|
||||
lblEnchantmentCount.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
|
||||
lblEnchantmentCount.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_enchantment.png"))); // NOI18N
|
||||
lblEnchantmentCount.setText("999");
|
||||
lblEnchantmentCount.setToolTipText("Number of enchantments.");
|
||||
lblEnchantmentCount.setVerticalAlignment(javax.swing.SwingConstants.TOP);
|
||||
lblEnchantmentCount.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
|
||||
lblEnchantmentCount.setFocusable(false);
|
||||
lblEnchantmentCount.setInheritsPopupMenu(false);
|
||||
lblEnchantmentCount.setRequestFocusEnabled(false);
|
||||
lblEnchantmentCount.setVerifyInputWhenFocusTarget(false);
|
||||
|
||||
chkPiles.setText("Piles");
|
||||
chkPiles.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
|
||||
chkPiles.setMargin(new java.awt.Insets(3, 2, 2, 2));
|
||||
chkPiles.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
chkPilesActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
chkPiles.addActionListener(evt -> chkPilesActionPerformed(evt));
|
||||
|
||||
cbSortBy.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "SortBy" }));
|
||||
cbSortBy.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"SortBy"}));
|
||||
cbSortBy.setToolTipText("Sort the cards if card view is active.");
|
||||
cbSortBy.setMaximumSize(new java.awt.Dimension(120, 20));
|
||||
cbSortBy.setMinimumSize(new java.awt.Dimension(120, 20));
|
||||
cbSortBy.setName("SortBy"); // NOI18N
|
||||
cbSortBy.setOpaque(false);
|
||||
cbSortBy.setPreferredSize(new java.awt.Dimension(120, 20));
|
||||
cbSortBy.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
cbSortByActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
cbSortBy.addActionListener(evt -> cbSortByActionPerformed(evt));
|
||||
|
||||
bgView.add(jToggleListView);
|
||||
jToggleListView.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/list_panel.png"))); // NOI18N
|
||||
|
@ -601,11 +543,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
jToggleListView.setMaximumSize(new java.awt.Dimension(37, 25));
|
||||
jToggleListView.setMinimumSize(new java.awt.Dimension(37, 25));
|
||||
jToggleListView.setPreferredSize(new java.awt.Dimension(44, 22));
|
||||
jToggleListView.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
jToggleListViewActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
jToggleListView.addActionListener(evt -> jToggleListViewActionPerformed(evt));
|
||||
|
||||
bgView.add(jToggleCardView);
|
||||
jToggleCardView.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/card_panel.png"))); // NOI18N
|
||||
|
@ -613,68 +551,41 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
jToggleCardView.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING);
|
||||
jToggleCardView.setMargin(new java.awt.Insets(2, 6, 2, 6));
|
||||
jToggleCardView.setPreferredSize(new java.awt.Dimension(40, 22));
|
||||
jToggleCardView.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
jToggleCardViewActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
|
||||
lblArtifactCount.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
|
||||
lblArtifactCount.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_artifact.png"))); // NOI18N
|
||||
lblArtifactCount.setText("999");
|
||||
lblArtifactCount.setToolTipText("Number of artifacts");
|
||||
lblArtifactCount.setVerticalAlignment(javax.swing.SwingConstants.TOP);
|
||||
lblArtifactCount.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
|
||||
lblArtifactCount.setFocusable(false);
|
||||
lblArtifactCount.setInheritsPopupMenu(false);
|
||||
lblArtifactCount.setRequestFocusEnabled(false);
|
||||
lblArtifactCount.setVerifyInputWhenFocusTarget(false);
|
||||
jToggleCardView.addActionListener(evt -> jToggleCardViewActionPerformed(evt));
|
||||
|
||||
javax.swing.GroupLayout panelControlLayout = new javax.swing.GroupLayout(panelControl);
|
||||
panelControl.setLayout(panelControlLayout);
|
||||
panelControlLayout.setHorizontalGroup(
|
||||
panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(panelControlLayout.createSequentialGroup()
|
||||
.addComponent(lblCount)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(lblLandCount)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(lblCreatureCount)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(lblSorceryCount)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(lblInstantCount)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(lblEnchantmentCount)
|
||||
.addGap(4, 4, 4)
|
||||
.addComponent(lblArtifactCount)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(chkPiles)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(cbSortBy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(jToggleListView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(jToggleCardView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGap(0, 62, Short.MAX_VALUE))
|
||||
panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(panelControlLayout.createSequentialGroup()
|
||||
.addComponent(lblCount)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(lblLandCount)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(lblCreatureCount)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(chkPiles)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(cbSortBy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(jToggleListView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(jToggleCardView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||
);
|
||||
panelControlLayout.setVerticalGroup(
|
||||
panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(panelControlLayout.createSequentialGroup()
|
||||
.addGroup(panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(lblCount)
|
||||
.addComponent(lblLandCount)
|
||||
.addComponent(lblCreatureCount)
|
||||
.addComponent(lblSorceryCount)
|
||||
.addComponent(lblInstantCount)
|
||||
.addComponent(lblEnchantmentCount)
|
||||
.addComponent(chkPiles)
|
||||
.addComponent(lblArtifactCount))
|
||||
.addComponent(cbSortBy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(jToggleListView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(jToggleCardView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addGap(0, 0, 0))
|
||||
panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(panelControlLayout.createSequentialGroup()
|
||||
.addGroup(panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(lblCount)
|
||||
.addComponent(lblLandCount)
|
||||
.addComponent(lblCreatureCount)
|
||||
.addComponent(chkPiles))
|
||||
.addComponent(cbSortBy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(jToggleListView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(jToggleCardView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addGap(0, 0, 0))
|
||||
);
|
||||
|
||||
jToggleListView.getAccessibleContext().setAccessibleDescription("Switch between image and table view.");
|
||||
|
@ -685,22 +596,28 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGap(1, 1, 1)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(panelControl, javax.swing.GroupLayout.DEFAULT_SIZE, 703, Short.MAX_VALUE)
|
||||
.addComponent(panelCardArea)))
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(panelControl, javax.swing.GroupLayout.PREFERRED_SIZE, 467, Short.MAX_VALUE)
|
||||
.addComponent(panelCardArea)
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addComponent(panelControl, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGap(0, 0, 0)
|
||||
.addComponent(panelCardArea, javax.swing.GroupLayout.DEFAULT_SIZE, 86, Short.MAX_VALUE))
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addComponent(panelControl, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGap(2, 2, 2)
|
||||
.addComponent(panelCardArea, javax.swing.GroupLayout.DEFAULT_SIZE, 179, Short.MAX_VALUE))
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
private void jToggleCardViewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleCardViewActionPerformed
|
||||
currentView = this;
|
||||
panelCardArea.setViewportView(cardArea);
|
||||
cbSortBy.setEnabled(true);
|
||||
chkPiles.setEnabled(true);
|
||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_DRAFT_VIEW, "cardView");
|
||||
redrawCards();
|
||||
}//GEN-LAST:event_jToggleCardViewActionPerformed
|
||||
|
||||
private void jToggleListViewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleListViewActionPerformed
|
||||
currentView = mainModel;
|
||||
panelCardArea.setViewportView(mainTable);
|
||||
|
@ -720,15 +637,6 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
drawCards(sortSetting);
|
||||
}//GEN-LAST:event_chkPilesActionPerformed
|
||||
|
||||
private void jToggleCardViewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleCardViewActionPerformed
|
||||
currentView = this;
|
||||
panelCardArea.setViewportView(cardArea);
|
||||
cbSortBy.setEnabled(true);
|
||||
chkPiles.setEnabled(true);
|
||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_DRAFT_VIEW, "cardView");
|
||||
redrawCards();
|
||||
}//GEN-LAST:event_jToggleCardViewActionPerformed
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.ButtonGroup bgView;
|
||||
private javax.swing.JLayeredPane cardArea;
|
||||
|
@ -736,13 +644,9 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
private javax.swing.JCheckBox chkPiles;
|
||||
private javax.swing.JToggleButton jToggleCardView;
|
||||
private javax.swing.JToggleButton jToggleListView;
|
||||
private javax.swing.JLabel lblArtifactCount;
|
||||
private javax.swing.JLabel lblCount;
|
||||
private javax.swing.JLabel lblCreatureCount;
|
||||
private javax.swing.JLabel lblEnchantmentCount;
|
||||
private javax.swing.JLabel lblInstantCount;
|
||||
private javax.swing.JLabel lblLandCount;
|
||||
private javax.swing.JLabel lblSorceryCount;
|
||||
private javax.swing.JScrollPane panelCardArea;
|
||||
private javax.swing.JPanel panelControl;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
|
@ -759,15 +663,15 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
e.consume();
|
||||
if (obj instanceof Card) {
|
||||
if (e.isAltDown()) {
|
||||
cardEventSource.altDoubleClick(((Card) obj).getOriginal(), "alt-double-click");
|
||||
cardEventSource.fireEvent(((Card) obj).getOriginal(), ClientEventType.ALT_DOUBLE_CLICK);
|
||||
} else {
|
||||
cardEventSource.doubleClick(((Card) obj).getOriginal(), "double-click");
|
||||
cardEventSource.fireEvent(((Card) obj).getOriginal(), ClientEventType.DOUBLE_CLICK);
|
||||
}
|
||||
} else if (obj instanceof MageCard) {
|
||||
if (e.isAltDown()) {
|
||||
cardEventSource.altDoubleClick(((MageCard) obj).getOriginal(), "alt-double-click");
|
||||
cardEventSource.fireEvent(((MageCard) obj).getOriginal(), ClientEventType.ALT_DOUBLE_CLICK);
|
||||
} else {
|
||||
cardEventSource.doubleClick(((MageCard) obj).getOriginal(), "double-click");
|
||||
cardEventSource.fireEvent(((MageCard) obj).getOriginal(), ClientEventType.DOUBLE_CLICK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -794,7 +698,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
private void checkMenu(MouseEvent Me, SimpleCardView card) {
|
||||
if (Me.isPopupTrigger()) {
|
||||
Me.consume();
|
||||
cardEventSource.showPopupMenuEvent(card, Me.getComponent(), Me.getX(), Me.getY(), "show-popup-menu");
|
||||
cardEventSource.fireEvent(card, Me.getComponent(), Me.getX(), Me.getY(), ClientEventType.SHOW_POP_UP_MENU);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -34,18 +34,11 @@
|
|||
|
||||
package mage.client.cards;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import mage.cards.CardDimensions;
|
||||
import mage.cards.MageCard;
|
||||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.client.util.CardViewRarityComparator;
|
||||
import mage.client.util.ClientEventType;
|
||||
import mage.client.util.Event;
|
||||
import mage.client.util.Listener;
|
||||
import mage.client.util.audio.AudioManager;
|
||||
|
@ -54,6 +47,12 @@ import mage.view.CardView;
|
|||
import mage.view.CardsView;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author BetaSteward_at_googlemail.com
|
||||
|
@ -62,7 +61,7 @@ public class DraftGrid extends javax.swing.JPanel implements MouseListener {
|
|||
|
||||
private static final Logger logger = Logger.getLogger(DraftGrid.class);
|
||||
|
||||
protected CardEventSource cardEventSource = new CardEventSource();
|
||||
protected final CardEventSource cardEventSource = new CardEventSource();
|
||||
protected BigCard bigCard;
|
||||
protected MageCard markedCard;
|
||||
protected boolean emptyGrid;
|
||||
|
@ -85,7 +84,7 @@ public class DraftGrid extends javax.swing.JPanel implements MouseListener {
|
|||
}
|
||||
|
||||
public void loadBooster(CardsView booster, BigCard bigCard) {
|
||||
if (booster instanceof CardsView && booster.size() == 0) {
|
||||
if (booster instanceof CardsView && booster.isEmpty()) {
|
||||
emptyGrid = true;
|
||||
} else {
|
||||
if (!emptyGrid) {
|
||||
|
@ -126,9 +125,9 @@ public class DraftGrid extends javax.swing.JPanel implements MouseListener {
|
|||
Dimension dimension = new Dimension(cardDimension.frameWidth, cardDimension.frameHeight);
|
||||
|
||||
List<CardView> sortedCards = new ArrayList<>(booster.values());
|
||||
Collections.sort(sortedCards, new CardViewRarityComparator());
|
||||
sortedCards.sort(new CardViewRarityComparator());
|
||||
for (CardView card: sortedCards) {
|
||||
MageCard cardImg = Plugins.getInstance().getMageCard(card, bigCard, dimension, null, true);
|
||||
MageCard cardImg = Plugins.instance.getMageCard(card, bigCard, dimension, null, true, true);
|
||||
cardImg.addMouseListener(this);
|
||||
add(cardImg);
|
||||
cardImg.update(card);
|
||||
|
@ -157,7 +156,7 @@ public class DraftGrid extends javax.swing.JPanel implements MouseListener {
|
|||
}
|
||||
|
||||
private void hidePopup() {
|
||||
Plugins.getInstance().getActionCallback().mouseExited(null, null);
|
||||
Plugins.instance.getActionCallback().mouseExited(null, null);
|
||||
}
|
||||
|
||||
/** This method is called from within the constructor to
|
||||
|
@ -187,7 +186,7 @@ public class DraftGrid extends javax.swing.JPanel implements MouseListener {
|
|||
if (e.getButton() == MouseEvent.BUTTON1) {
|
||||
Object obj = e.getSource();
|
||||
if (obj instanceof MageCard) {
|
||||
this.cardEventSource.doubleClick(((MageCard)obj).getOriginal(), "pick-a-card");
|
||||
this.cardEventSource.fireEvent(((MageCard)obj).getOriginal(), ClientEventType.PICK_A_CARD);
|
||||
this.hidePopup();
|
||||
AudioManager.playOnDraftSelect();
|
||||
}
|
||||
|
@ -204,7 +203,7 @@ public class DraftGrid extends javax.swing.JPanel implements MouseListener {
|
|||
if (this.markedCard != null) {
|
||||
markedCard.setSelected(false);
|
||||
}
|
||||
this.cardEventSource.doubleClick(((MageCard)obj).getOriginal(), "mark-a-card");
|
||||
this.cardEventSource.fireEvent(((MageCard)obj).getOriginal(), ClientEventType.MARK_A_CARD);
|
||||
markedCard = ((MageCard)obj);
|
||||
markedCard.setSelected(true);
|
||||
repaint();
|
||||
|
|
2077
Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java
Normal file
2077
Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,14 @@
|
|||
package mage.client.cards;
|
||||
|
||||
import mage.view.CardView;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Created by StravantUser on 2016-09-22.
|
||||
*/
|
||||
public interface DragCardSource {
|
||||
Collection<CardView> dragCardList();
|
||||
void dragCardBegin();
|
||||
void dragCardEnd(DragCardTarget target);
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
package mage.client.cards;
|
||||
|
||||
import mage.view.CardView;
|
||||
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Created by StravantUser on 2016-09-22.
|
||||
*/
|
||||
public interface DragCardTarget {
|
||||
void dragCardEnter(MouseEvent e);
|
||||
void dragCardMove(MouseEvent e);
|
||||
void dragCardExit(MouseEvent e);
|
||||
void dragCardDrop(MouseEvent e, DragCardSource source, Collection<CardView> cards);
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
package mage.client.cards;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.swing.JComponent;
|
||||
|
||||
class Slice {
|
||||
|
||||
double value;
|
||||
Color color;
|
||||
|
||||
public Slice(double value, Color color) {
|
||||
this.value = value;
|
||||
this.color = color;
|
||||
}
|
||||
}
|
||||
|
||||
public class ManaPieChart extends JComponent {
|
||||
|
||||
ArrayList<Slice> slices = new ArrayList<Slice>();
|
||||
|
||||
ManaPieChart() {
|
||||
}
|
||||
|
||||
ManaPieChart(Integer w, Integer u, Integer b, Integer r, Integer g, Integer c) {
|
||||
if (w != null && w > 0) {
|
||||
slices.add(new Slice(w, Color.WHITE));
|
||||
}
|
||||
if (u != null && u > 0) {
|
||||
slices.add(new Slice(u, Color.BLUE));
|
||||
}
|
||||
if (b != null && b > 0) {
|
||||
slices.add(new Slice(b, Color.BLACK));
|
||||
}
|
||||
if (r != null && r > 0) {
|
||||
slices.add(new Slice(r, Color.RED));
|
||||
}
|
||||
if (g != null && g > 0) {
|
||||
slices.add(new Slice(g, Color.GREEN));
|
||||
}
|
||||
if (c != null && c > 0) {
|
||||
slices.add(new Slice(c, Color.LIGHT_GRAY));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension getPreferredSize() {
|
||||
Dimension preferred = super.getPreferredSize();
|
||||
Dimension minimum = getMinimumSize();
|
||||
Dimension maximum = getMaximumSize();
|
||||
preferred.width = Math.min(Math.max(preferred.width, minimum.width), maximum.width);
|
||||
preferred.height = Math.min(Math.max(preferred.height, minimum.height), maximum.height);
|
||||
return preferred;
|
||||
}
|
||||
|
||||
public void paint(Graphics g) {
|
||||
drawPie((Graphics2D) g, getBounds(), slices.toArray(new Slice[slices.size()]));
|
||||
}
|
||||
|
||||
void drawPie(Graphics2D g, Rectangle area, Slice[] slices) {
|
||||
double total = 0.0D;
|
||||
for (int i = 0; i < slices.length; i++) {
|
||||
total += slices[i].value;
|
||||
}
|
||||
|
||||
double curValue = 0.0D;
|
||||
int startAngle = 0;
|
||||
int lastAngle = 0;
|
||||
for (int i = 0; i < slices.length; i++) {
|
||||
startAngle = lastAngle;
|
||||
int arcAngle = (int) (slices[i].value * 360 / total);
|
||||
|
||||
g.setColor(slices[i].color);
|
||||
g.fillArc(area.x, area.y, area.width - 20, area.height - 20, startAngle, arcAngle);
|
||||
curValue += slices[i].value;
|
||||
lastAngle += arcAngle;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -34,30 +34,24 @@
|
|||
|
||||
package mage.client.cards;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.RenderingHints;
|
||||
import mage.cards.CardDimensions;
|
||||
import mage.cards.MagePermanent;
|
||||
import mage.cards.Sets;
|
||||
import mage.client.util.Config;
|
||||
import mage.client.util.TransformedImageCache;
|
||||
import mage.view.CounterView;
|
||||
import mage.view.PermanentView;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import javax.swing.PopupFactory;
|
||||
import mage.cards.CardDimensions;
|
||||
import mage.cards.MagePermanent;
|
||||
import mage.cards.Sets;
|
||||
|
||||
import static mage.client.constants.Constants.DAMAGE_MAX_LEFT;
|
||||
import static mage.client.constants.Constants.POWBOX_TEXT_MAX_TOP;
|
||||
import mage.client.util.Config;
|
||||
import mage.client.util.ImageHelper;
|
||||
import mage.constants.CardType;
|
||||
import mage.view.CounterView;
|
||||
import mage.view.PermanentView;
|
||||
import org.mage.plugins.card.images.ImageCache;
|
||||
import mage.client.util.TransformedImageCache;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -67,9 +61,9 @@ public class Permanent extends Card {
|
|||
|
||||
protected PermanentView permanent;
|
||||
|
||||
protected List<MagePermanent> links = new ArrayList<>();
|
||||
protected final List<MagePermanent> links = new ArrayList<>();
|
||||
protected boolean linked;
|
||||
protected BufferedImage tappedImage;
|
||||
protected final BufferedImage tappedImage;
|
||||
protected BufferedImage flippedImage;
|
||||
|
||||
/** Creates new form Permanent
|
||||
|
@ -108,25 +102,25 @@ public class Permanent extends Card {
|
|||
if (permanent.getOriginal() != null) {
|
||||
sb.append("\n----- Originally -------\n");
|
||||
sb.append(permanent.getOriginal().getName());
|
||||
if (permanent.getOriginal().getManaCost().size() > 0) {
|
||||
sb.append("\n").append(permanent.getOriginal().getManaCost());
|
||||
if (!permanent.getOriginal().getManaCost().isEmpty()) {
|
||||
sb.append('\n').append(permanent.getOriginal().getManaCost());
|
||||
}
|
||||
sb.append("\n").append(getType(permanent.getOriginal()));
|
||||
sb.append('\n').append(getType(permanent.getOriginal()));
|
||||
if (permanent.getOriginal().getColor().hasColor()) {
|
||||
sb.append("\n").append(permanent.getOriginal().getColor().toString());
|
||||
sb.append('\n').append(permanent.getOriginal().getColor().toString());
|
||||
}
|
||||
if (permanent.getOriginal().getCardTypes().contains(CardType.CREATURE)) {
|
||||
sb.append("\n").append(permanent.getOriginal().getPower()).append("/").append(permanent.getOriginal().getToughness());
|
||||
if (permanent.getOriginal().isCreature()) {
|
||||
sb.append('\n').append(permanent.getOriginal().getPower()).append('/').append(permanent.getOriginal().getToughness());
|
||||
}
|
||||
else if (permanent.getOriginal().getCardTypes().contains(CardType.PLANESWALKER)) {
|
||||
sb.append("\n").append(permanent.getOriginal().getLoyalty());
|
||||
else if (permanent.getOriginal().isPlanesWalker()) {
|
||||
sb.append('\n').append(permanent.getOriginal().getLoyalty());
|
||||
}
|
||||
for (String rule: getRules()) {
|
||||
sb.append("\n").append(rule);
|
||||
sb.append('\n').append(rule);
|
||||
}
|
||||
if (permanent.getOriginal().getExpansionSetCode().length() > 0) {
|
||||
sb.append("\n").append(permanent.getCardNumber()).append(" - ");
|
||||
sb.append("\n").append(Sets.getInstance().get(permanent.getOriginal().getExpansionSetCode()).getName()).append(" - ");
|
||||
if (!permanent.getOriginal().getExpansionSetCode().isEmpty()) {
|
||||
sb.append('\n').append(permanent.getCardNumber()).append(" - ");
|
||||
sb.append('\n').append(Sets.getInstance().get(permanent.getOriginal().getExpansionSetCode()).getName()).append(" - ");
|
||||
sb.append(permanent.getOriginal().getRarity().toString());
|
||||
}
|
||||
// sb.append("\n").append(card.getId());
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue