diff --git a/Mage.Client/pom.xml b/Mage.Client/pom.xml
index f2de6ebcf85..0ea1a89ba60 100644
--- a/Mage.Client/pom.xml
+++ b/Mage.Client/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 1.4.24
+ 1.4.25
org.mage
diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java
index 2e611c93cb1..6973fa4ea79 100644
--- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java
+++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java
@@ -7,7 +7,6 @@ import mage.cards.decks.DeckCardLayout;
import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
-import mage.client.MageFrame;
import mage.client.constants.Constants;
import mage.client.dialog.PreferencesDialog;
import mage.client.plugins.impl.Plugins;
@@ -1410,38 +1409,36 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
}
}
- String finalInfo = "Found the following quantity of mana costs, mana sources and land types:
";
- for (String qty : qtys.keySet()) {
- int value = qtys.get(qty);
- if (value > 0) {
- finalInfo += "- " + qty + " = " + value;
- }
- }
+ JPanel panel = new JPanel();
+ panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
- for (String source : sourcePips.keySet()) {
- int value = sourcePips.get(source);
- if (value > 0) {
- finalInfo += "
- " + "Mana source " + source + " = " + value;
- }
- }
+ JPanel panel2 = new JPanel();
+ panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS));
+ ManaPieChart chart = new ManaPieChart(pips.get("#w}"), pips.get("#u}"), pips.get("#b}"), pips.get("#r}"), pips.get("#g}"), pips.get("#c}"));
+ chart.setMinimumSize(new Dimension(200, 200));
+ panel2.add(new JLabel("Casting Costs found:"));
+ panel2.add(chart);
- for (String pip : pips.keySet()) {
- int value = pips.get(pip);
- if (value > 0) {
- finalInfo += "
- " + pip.toUpperCase() + " mana pip/s = " + value;
- }
- }
+ JPanel panel3 = new JPanel();
+ panel3.setLayout(new BoxLayout(panel3, BoxLayout.Y_AXIS));
+ ManaPieChart chart2 = new ManaPieChart(qtys.get("plains"), qtys.get("island"), qtys.get("swamp"), qtys.get("mountain"), qtys.get("forest"), qtys.get("wastes"));
+ chart2.setMinimumSize(new Dimension(200, 200));
+ panel3.add(new JLabel("Basic Land types found:"));
+ panel3.add(chart2);
- for (String mana : manaCounts.keySet()) {
- int value = manaCounts.get(mana);
- if (value > 0) {
- finalInfo += "
- " + mana.toUpperCase() + " mana sources = " + value;
- }
- }
- finalInfo = finalInfo.replaceAll("#", "\\{");
- finalInfo += "
";
+ JPanel panel4 = new JPanel();
+ panel4.setLayout(new BoxLayout(panel4, BoxLayout.Y_AXIS));
+ ManaPieChart chart3 = new ManaPieChart(manaCounts.get("{W}"), manaCounts.get("{U}"), manaCounts.get("{B}"), manaCounts.get("{R}"), manaCounts.get("{G}"), manaCounts.get("{C}"));
+ chart3.setMinimumSize(new Dimension(200, 200));
+ panel4.add(new JLabel("Mana sources found:"));
+ panel4.add(chart3);
- MageFrame.getInstance().showMessage(finalInfo);
+ panel.add(panel2);
+ panel.add(panel3);
+ panel.add(panel4);
+
+ JFrame frame = new JFrame("JOptionPane showMessageDialog component example");
+ JOptionPane.showMessageDialog(frame, panel, "This is the distribution of colors found", JOptionPane.INFORMATION_MESSAGE);
}
public void blingDeck() {
diff --git a/Mage.Client/src/main/java/mage/client/cards/ManaPieChart.java b/Mage.Client/src/main/java/mage/client/cards/ManaPieChart.java
new file mode 100644
index 00000000000..a8d447e700d
--- /dev/null
+++ b/Mage.Client/src/main/java/mage/client/cards/ManaPieChart.java
@@ -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 slices = new ArrayList();
+
+ 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;
+ }
+ }
+}
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form
index b3c2a7d1ce0..1cf837043f2 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form
@@ -388,12 +388,7 @@
-
-
-
-
-
-
+
@@ -498,21 +493,25 @@
-
+
-
+
-
+
-
+
-
-
+
+
+
+
+
+
@@ -524,19 +523,26 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -551,6 +557,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -558,11 +587,11 @@
-
+
-
+
@@ -581,24 +610,107 @@
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -634,52 +746,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java
index 91c77056289..c2a7c234561 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java
@@ -33,6 +33,11 @@
*/
package mage.client.deckeditor;
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+import javax.swing.*;
+import javax.swing.table.DefaultTableCellRenderer;
import mage.MageObject;
import mage.ObjectColor;
import mage.cards.Card;
@@ -59,20 +64,13 @@ import mage.filter.predicate.other.ExpansionSetPredicate;
import mage.view.CardView;
import mage.view.CardsView;
-import javax.swing.*;
-import javax.swing.table.DefaultTableCellRenderer;
-import java.awt.*;
-import java.awt.event.*;
-import java.util.*;
-import java.util.List;
-
/**
*
* @author BetaSteward_at_googlemail.com, nantuko
*/
public class CardSelector extends javax.swing.JPanel implements ComponentListener, DragCardTarget {
- private final List cards = new ArrayList<>();
+ private final java.util.List cards = new ArrayList<>();
private BigCard bigCard;
private boolean limited = false;
private final SortSetting sortSetting;
@@ -138,6 +136,9 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
mainTable.setOpaque(false);
cbSortBy.setEnabled(false);
chkPiles.setEnabled(false);
+// chkNames.setEnabled(true);
+// chkTypes.setEnabled(true);
+// chkRules.setEnabled(true);
mainTable.addMouseListener(new MouseAdapter() {
@Override
@@ -194,7 +195,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
this.currentView.drawCards(sortSetting);
}
- public void loadSideboard(List sideboard, BigCard bigCard) {
+ public void loadSideboard(java.util.List sideboard, BigCard bigCard) {
this.bigCard = bigCard;
this.btnBooster.setVisible(false);
this.btnClear.setVisible(false);
@@ -221,7 +222,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
FilterCard filter = new FilterCard();
String name = jTextFieldSearch.getText().trim();
- filter.add(new CardTextPredicate(name));
+ filter.add(new CardTextPredicate(name, chkNames.isSelected(), chkTypes.isSelected(), chkRules.isSelected()));
if (limited) {
ArrayList> predicates = new ArrayList<>();
@@ -321,7 +322,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
if (this.cbExpansionSet.isVisible()) {
String expansionSelection = this.cbExpansionSet.getSelectedItem().toString();
if (!expansionSelection.equals("- All Sets")) {
- List setCodes = ConstructedFormats.getSetsByFormat(expansionSelection);
+ java.util.List setCodes = ConstructedFormats.getSetsByFormat(expansionSelection);
criteria.setCodes(setCodes.toArray(new String[0]));
}
}
@@ -369,7 +370,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
private void filterCards() {
FilterCard filter = buildFilter();
try {
- List filteredCards = new ArrayList<>();
+ java.util.List filteredCards = new ArrayList<>();
setCursor(new Cursor(Cursor.WAIT_CURSOR));
if (limited) {
for (Card card : cards) {
@@ -378,7 +379,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
}
}
} else {
- List foundCards = CardRepository.instance.findCards(buildCriteria());
+ java.util.List foundCards = CardRepository.instance.findCards(buildCriteria());
for (CardInfo cardInfo : foundCards) {
Card card = cardInfo.getMockCard();
if (filter.match(card, null)) {
@@ -400,8 +401,8 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
this.cardCount.setText(String.valueOf(value));
}
- public List getCardGridComponents() {
- List components = new ArrayList<>();
+ public java.util.List getCardGridComponents() {
+ java.util.List components = new ArrayList<>();
components.add(mainModel);
components.add(cardGrid);
return components;
@@ -458,15 +459,17 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
cardSelectorScrollPane = new javax.swing.JScrollPane();
cardSelectorBottomPanel = new javax.swing.JPanel();
jButtonAddToMain = new javax.swing.JButton();
+ jButtonRemoveFromMain = new javax.swing.JButton();
jButtonAddToSideboard = new javax.swing.JButton();
- jLabelSearch = new javax.swing.JLabel();
+ jButtonRemoveFromSideboard = new javax.swing.JButton();
jTextFieldSearch = new javax.swing.JTextField();
+ chkNames = new javax.swing.JCheckBox();
+ chkTypes = new javax.swing.JCheckBox();
+ chkRules = new javax.swing.JCheckBox();
jButtonSearch = new javax.swing.JButton();
jButtonClean = new javax.swing.JButton();
cardCountLabel = new javax.swing.JLabel();
cardCount = new javax.swing.JLabel();
- jButtonRemoveFromMain = new javax.swing.JButton();
- jButtonRemoveFromSideboard = new javax.swing.JButton();
tbColor.setFloatable(false);
tbColor.setRollover(true);
@@ -483,7 +486,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbRed.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tbRed.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_red.png"))); // NOI18N
tbRed.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbRed.addActionListener(evt -> tbRedActionPerformed(evt));
+ tbRed.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbRedActionPerformed(evt);
+ }
+ });
tbColor.add(tbRed);
tbGreen.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_green_off.png"))); // NOI18N
@@ -495,7 +502,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbGreen.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_green.png"))); // NOI18N
tbGreen.setVerifyInputWhenFocusTarget(false);
tbGreen.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbGreen.addActionListener(evt -> tbGreenActionPerformed(evt));
+ tbGreen.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbGreenActionPerformed(evt);
+ }
+ });
tbColor.add(tbGreen);
tbBlue.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_blueOff.png"))); // NOI18N
@@ -506,7 +517,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbBlue.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tbBlue.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_blue.png"))); // NOI18N
tbBlue.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbBlue.addActionListener(evt -> tbBlueActionPerformed(evt));
+ tbBlue.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbBlueActionPerformed(evt);
+ }
+ });
tbColor.add(tbBlue);
tbBlack.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_black_off.png"))); // NOI18N
@@ -517,7 +532,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbBlack.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tbBlack.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_black.png"))); // NOI18N
tbBlack.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbBlack.addActionListener(evt -> tbBlackActionPerformed(evt));
+ tbBlack.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbBlackActionPerformed(evt);
+ }
+ });
tbColor.add(tbBlack);
tbWhite.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_white_off.png"))); // NOI18N
@@ -528,7 +547,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbWhite.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tbWhite.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_white.png"))); // NOI18N
tbWhite.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbWhite.addActionListener(evt -> tbWhiteActionPerformed(evt));
+ tbWhite.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbWhiteActionPerformed(evt);
+ }
+ });
tbColor.add(tbWhite);
tbColorless.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/colorless_off.png"))); // NOI18N
@@ -539,7 +562,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbColorless.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tbColorless.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/colorless.png"))); // NOI18N
tbColorless.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbColorless.addActionListener(evt -> tbColorlessActionPerformed(evt));
+ tbColorless.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbColorlessActionPerformed(evt);
+ }
+ });
tbColor.add(tbColorless);
tbColor.add(jSeparator1);
@@ -548,7 +575,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
cbExpansionSet.setMinimumSize(new java.awt.Dimension(250, 25));
cbExpansionSet.setName("cbExpansionSet"); // NOI18N
cbExpansionSet.setPreferredSize(new java.awt.Dimension(250, 25));
- cbExpansionSet.addActionListener(evt -> cbExpansionSetActionPerformed(evt));
+ cbExpansionSet.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ cbExpansionSetActionPerformed(evt);
+ }
+ });
tbColor.add(cbExpansionSet);
tbColor.add(jSeparator2);
@@ -557,14 +588,22 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
btnBooster.setFocusable(false);
btnBooster.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnBooster.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- btnBooster.addActionListener(evt -> btnBoosterActionPerformed(evt));
+ btnBooster.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ btnBoosterActionPerformed(evt);
+ }
+ });
tbColor.add(btnBooster);
btnClear.setText("Clear");
btnClear.setFocusable(false);
btnClear.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnClear.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- btnClear.addActionListener(evt -> btnClearActionPerformed(evt));
+ btnClear.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ btnClearActionPerformed(evt);
+ }
+ });
tbColor.add(btnClear);
tbTypes.setFloatable(false);
@@ -580,7 +619,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbLand.setFocusable(false);
tbLand.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tbLand.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbLand.addActionListener(evt -> tbLandActionPerformed(evt));
+ tbLand.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbLandActionPerformed(evt);
+ }
+ });
tbTypes.add(tbLand);
tbCreatures.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_creatures.png"))); // NOI18N
@@ -591,7 +634,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbCreatures.setFocusable(false);
tbCreatures.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tbCreatures.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbCreatures.addActionListener(evt -> tbCreaturesActionPerformed(evt));
+ tbCreatures.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbCreaturesActionPerformed(evt);
+ }
+ });
tbTypes.add(tbCreatures);
tbArifiacts.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_artifact.png"))); // NOI18N
@@ -602,7 +649,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbArifiacts.setFocusable(false);
tbArifiacts.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tbArifiacts.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbArifiacts.addActionListener(evt -> tbArifiactsActionPerformed(evt));
+ tbArifiacts.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbArifiactsActionPerformed(evt);
+ }
+ });
tbTypes.add(tbArifiacts);
tbSorceries.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_sorcery.png"))); // NOI18N
@@ -613,7 +664,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbSorceries.setFocusable(false);
tbSorceries.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tbSorceries.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbSorceries.addActionListener(evt -> tbSorceriesActionPerformed(evt));
+ tbSorceries.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbSorceriesActionPerformed(evt);
+ }
+ });
tbTypes.add(tbSorceries);
tbInstants.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_instant.png"))); // NOI18N
@@ -624,7 +679,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbInstants.setFocusable(false);
tbInstants.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tbInstants.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbInstants.addActionListener(evt -> tbInstantsActionPerformed(evt));
+ tbInstants.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbInstantsActionPerformed(evt);
+ }
+ });
tbTypes.add(tbInstants);
tbEnchantments.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_enchantment.png"))); // NOI18N
@@ -635,7 +694,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbEnchantments.setFocusable(false);
tbEnchantments.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tbEnchantments.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbEnchantments.addActionListener(evt -> tbEnchantmentsActionPerformed(evt));
+ tbEnchantments.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbEnchantmentsActionPerformed(evt);
+ }
+ });
tbTypes.add(tbEnchantments);
tbPlaneswalkers.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_planeswalker.png"))); // NOI18N
@@ -646,7 +709,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
tbPlaneswalkers.setFocusable(false);
tbPlaneswalkers.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tbPlaneswalkers.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- tbPlaneswalkers.addActionListener(evt -> tbPlaneswalkersActionPerformed(evt));
+ tbPlaneswalkers.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ tbPlaneswalkersActionPerformed(evt);
+ }
+ });
tbTypes.add(tbPlaneswalkers);
tbTypes.add(jSeparator6);
@@ -655,15 +722,22 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
chkPiles.setFocusable(false);
chkPiles.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
chkPiles.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- chkPiles.addActionListener(evt -> chkPilesActionPerformed(evt));
+ chkPiles.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ chkPilesActionPerformed(evt);
+ }
+ });
tbTypes.add(chkPiles);
tbTypes.add(jSeparator3);
- cbSortBy.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
cbSortBy.setMaximumSize(new java.awt.Dimension(120, 20));
cbSortBy.setMinimumSize(new java.awt.Dimension(120, 20));
cbSortBy.setPreferredSize(new java.awt.Dimension(120, 20));
- cbSortBy.addActionListener(evt -> cbSortByActionPerformed(evt));
+ cbSortBy.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ cbSortByActionPerformed(evt);
+ }
+ });
tbTypes.add(cbSortBy);
tbTypes.add(jSeparator4);
@@ -678,7 +752,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
jToggleListView.setMaximumSize(new java.awt.Dimension(37, 22));
jToggleListView.setMinimumSize(new java.awt.Dimension(37, 22));
jToggleListView.setPreferredSize(new java.awt.Dimension(37, 22));
- jToggleListView.addActionListener(evt -> jToggleListViewActionPerformed(evt));
+ jToggleListView.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jToggleListViewActionPerformed(evt);
+ }
+ });
tbTypes.add(jToggleListView);
bgView.add(jToggleCardView);
@@ -693,7 +771,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
jToggleCardView.setName(""); // NOI18N
jToggleCardView.setPreferredSize(new java.awt.Dimension(37, 22));
jToggleCardView.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- jToggleCardView.addActionListener(evt -> jToggleCardViewActionPerformed(evt));
+ jToggleCardView.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jToggleCardViewActionPerformed(evt);
+ }
+ });
tbTypes.add(jToggleCardView);
cardSelectorScrollPane.setToolTipText("Double click to add the card to the main deck.
\nALT + Double click to add the card to the sideboard.");
@@ -704,52 +786,118 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
jButtonAddToMain.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/deck_in.png"))); // NOI18N
jButtonAddToMain.setToolTipText("Add selected cards to deck.
\nAlternative: Double click the card in card selector to move a card to the deck.");
jButtonAddToMain.setMargin(null);
- jButtonAddToMain.setMaximumSize(new java.awt.Dimension(42, 23));
- jButtonAddToMain.setMinimumSize(new java.awt.Dimension(42, 23));
- jButtonAddToMain.setPreferredSize(new java.awt.Dimension(40, 28));
- jButtonAddToMain.addActionListener(evt -> jButtonAddToMainActionPerformed(evt));
-
- jButtonAddToSideboard.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/sideboard_in.png"))); // NOI18N
- jButtonAddToSideboard.setToolTipText("Add selected cards to sideboard.
\nAlternative: ALT key + Double click the card in card selector to move a card to the sideboard.");
- jButtonAddToSideboard.setMargin(new java.awt.Insets(2, 0, 2, 0));
- jButtonAddToSideboard.setMaximumSize(new java.awt.Dimension(100, 30));
- jButtonAddToSideboard.setMinimumSize(new java.awt.Dimension(10, 30));
- jButtonAddToSideboard.setPreferredSize(new java.awt.Dimension(40, 28));
- jButtonAddToSideboard.addActionListener(evt -> jButtonAddToSideboardActionPerformed(evt));
-
- jLabelSearch.setText("Search:");
- jLabelSearch.setToolTipText("Searches for card names and in the rule text of the card.");
-
- jTextFieldSearch.setToolTipText("Searches for card names and in the rule text of the card.");
-
- jButtonSearch.setText("Search");
- jButtonSearch.setToolTipText("Performs the search.");
- jButtonSearch.addActionListener(evt -> jButtonSearchActionPerformed(evt));
-
- jButtonClean.setText("Clear");
- jButtonClean.setToolTipText("Clears the search field.");
- jButtonClean.addActionListener(evt -> jButtonCleanActionPerformed(evt));
-
- cardCountLabel.setText("Card count:");
- cardCountLabel.setToolTipText("Number of cards currently shown.");
-
- cardCount.setText("0");
+ jButtonAddToMain.setMaximumSize(new java.awt.Dimension(35, 23));
+ jButtonAddToMain.setMinimumSize(new java.awt.Dimension(35, 23));
+ jButtonAddToMain.setPreferredSize(new java.awt.Dimension(30, 28));
+ jButtonAddToMain.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jButtonAddToMainActionPerformed(evt);
+ }
+ });
jButtonRemoveFromMain.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/deck_out.png"))); // NOI18N
jButtonRemoveFromMain.setToolTipText("Remove selected cards from deck");
jButtonRemoveFromMain.setMargin(null);
jButtonRemoveFromMain.setMaximumSize(new java.awt.Dimension(42, 23));
jButtonRemoveFromMain.setMinimumSize(new java.awt.Dimension(42, 23));
- jButtonRemoveFromMain.setPreferredSize(new java.awt.Dimension(40, 28));
- jButtonRemoveFromMain.addActionListener(evt -> jButtonRemoveFromMainActionPerformed(evt));
+ jButtonRemoveFromMain.setPreferredSize(new java.awt.Dimension(30, 28));
+ jButtonRemoveFromMain.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jButtonRemoveFromMainActionPerformed(evt);
+ }
+ });
+
+ jButtonAddToSideboard.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/sideboard_in.png"))); // NOI18N
+ jButtonAddToSideboard.setToolTipText("Add selected cards to sideboard.
\nAlternative: ALT key + Double click the card in card selector to move a card to the sideboard.");
+ jButtonAddToSideboard.setMargin(new java.awt.Insets(2, 0, 2, 0));
+ jButtonAddToSideboard.setMaximumSize(new java.awt.Dimension(100, 30));
+ jButtonAddToSideboard.setMinimumSize(new java.awt.Dimension(10, 30));
+ jButtonAddToSideboard.setPreferredSize(new java.awt.Dimension(30, 28));
+ jButtonAddToSideboard.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jButtonAddToSideboardActionPerformed(evt);
+ }
+ });
jButtonRemoveFromSideboard.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/sideboard_out.png"))); // NOI18N
jButtonRemoveFromSideboard.setToolTipText("Remove selected cards from sideboard.");
jButtonRemoveFromSideboard.setMargin(new java.awt.Insets(2, 0, 2, 0));
jButtonRemoveFromSideboard.setMaximumSize(new java.awt.Dimension(10, 30));
jButtonRemoveFromSideboard.setMinimumSize(new java.awt.Dimension(100, 30));
- jButtonRemoveFromSideboard.setPreferredSize(new java.awt.Dimension(40, 28));
- jButtonRemoveFromSideboard.addActionListener(evt -> jButtonRemoveFromSideboardActionPerformed(evt));
+ jButtonRemoveFromSideboard.setPreferredSize(new java.awt.Dimension(30, 28));
+ jButtonRemoveFromSideboard.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jButtonRemoveFromSideboardActionPerformed(evt);
+ }
+ });
+
+ jTextFieldSearch.setToolTipText("Searches for card names and in the rule text of the card.");
+
+ chkNames.setSelected(true);
+ chkNames.setText("Names");
+ chkNames.setToolTipText("Search in card names.");
+ chkNames.setFocusable(false);
+ chkNames.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
+ chkNames.setMaximumSize(new java.awt.Dimension(67, 16));
+ chkNames.setMinimumSize(new java.awt.Dimension(67, 16));
+ chkNames.setPreferredSize(new java.awt.Dimension(67, 16));
+ chkNames.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
+ chkNames.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ chkNamesActionPerformed(evt);
+ }
+ });
+
+ chkTypes.setSelected(true);
+ chkTypes.setText("Types");
+ chkTypes.setToolTipText("Search in card types.");
+ chkTypes.setFocusable(false);
+ chkTypes.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
+ chkTypes.setMaximumSize(new java.awt.Dimension(63, 16));
+ chkTypes.setMinimumSize(new java.awt.Dimension(63, 16));
+ chkTypes.setPreferredSize(new java.awt.Dimension(63, 16));
+ chkTypes.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
+ chkTypes.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ chkTypesActionPerformed(evt);
+ }
+ });
+
+ chkRules.setSelected(true);
+ chkRules.setText("Rules");
+ chkRules.setToolTipText("Search in card rules.");
+ chkRules.setFocusable(false);
+ chkRules.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
+ chkRules.setMaximumSize(new java.awt.Dimension(59, 16));
+ chkRules.setMinimumSize(new java.awt.Dimension(59, 16));
+ chkRules.setPreferredSize(new java.awt.Dimension(59, 16));
+ chkRules.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
+ chkRules.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ chkRulesActionPerformed(evt);
+ }
+ });
+
+ jButtonSearch.setText("Search");
+ jButtonSearch.setToolTipText("Performs the search.");
+ jButtonSearch.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jButtonSearchActionPerformed(evt);
+ }
+ });
+
+ jButtonClean.setText("Clear");
+ jButtonClean.setToolTipText("Clears the search field.");
+ jButtonClean.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jButtonCleanActionPerformed(evt);
+ }
+ });
+
+ cardCountLabel.setText("Card count:");
+ cardCountLabel.setToolTipText("Number of cards currently shown.");
+
+ cardCount.setText("0");
javax.swing.GroupLayout cardSelectorBottomPanelLayout = new javax.swing.GroupLayout(cardSelectorBottomPanel);
cardSelectorBottomPanel.setLayout(cardSelectorBottomPanelLayout);
@@ -758,21 +906,25 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
.addGroup(cardSelectorBottomPanelLayout.createSequentialGroup()
.addGap(6, 6, 6)
.addComponent(jButtonAddToMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGap(2, 2, 2)
.addComponent(jButtonRemoveFromMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGap(1, 1, 1)
.addComponent(jButtonAddToSideboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGap(2, 2, 2)
.addComponent(jButtonRemoveFromSideboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(jLabelSearch)
+ .addComponent(jTextFieldSearch, javax.swing.GroupLayout.PREFERRED_SIZE, 219, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(jTextFieldSearch, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addGap(2, 2, 2)
.addComponent(jButtonSearch)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButtonClean)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(chkNames, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(chkTypes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(chkRules, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGap(5, 5, 5)
.addComponent(cardCountLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cardCount, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
@@ -782,18 +934,23 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(cardSelectorBottomPanelLayout.createSequentialGroup()
.addGap(4, 4, 4)
- .addGroup(cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(jButtonRemoveFromMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(jButtonAddToSideboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(jButtonRemoveFromSideboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(jLabelSearch)
- .addComponent(jTextFieldSearch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(jButtonSearch)
- .addComponent(jButtonClean)
- .addComponent(cardCountLabel)
- .addComponent(cardCount)
- .addComponent(jButtonAddToMain, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
- .addGap(4, 4, 4))
+ .addGroup(cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(chkTypes, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(chkRules, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(chkNames, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(cardSelectorBottomPanelLayout.createSequentialGroup()
+ .addGroup(cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(jButtonRemoveFromMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(jButtonAddToSideboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(jButtonRemoveFromSideboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(jTextFieldSearch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(jButtonSearch)
+ .addComponent(jButtonClean)
+ .addComponent(cardCount)
+ .addComponent(jButtonAddToMain, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(cardCountLabel))
+ .addGap(0, 0, Short.MAX_VALUE)))
+ .addContainerGap())
);
cardCountLabel.getAccessibleContext().setAccessibleName("cardCountLabel");
@@ -832,7 +989,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
}//GEN-LAST:event_btnClearActionPerformed
private void btnBoosterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBoosterActionPerformed
- List sets = ConstructedFormats.getSetsByFormat(this.cbExpansionSet.getSelectedItem().toString());
+ java.util.List sets = ConstructedFormats.getSetsByFormat(this.cbExpansionSet.getSelectedItem().toString());
if (sets.size() == 1) {
if (!this.limited) {
this.limited = true;
@@ -840,7 +997,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
}
ExpansionSet expansionSet = Sets.getInstance().get(sets.get(0));
if (expansionSet != null) {
- List booster = expansionSet.createBooster();
+ java.util.List booster = expansionSet.createBooster();
cards.addAll(booster);
filterCards();
}
@@ -890,7 +1047,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
private void jButtonAddToMainActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAddToMainActionPerformed
if (mainTable.getSelectedRowCount() > 0) {
int[] n = mainTable.getSelectedRows();
- List indexes = asList(n);
+ java.util.List indexes = asList(n);
Collections.reverse(indexes);
for (Integer index : indexes) {
mainModel.doubleClick(index);
@@ -905,7 +1062,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
private void jButtonAddToSideboardActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAddToSideboardActionPerformed
if (mainTable.getSelectedRowCount() > 0) {
int[] n = mainTable.getSelectedRows();
- List indexes = asList(n);
+ java.util.List indexes = asList(n);
Collections.reverse(indexes);
for (Integer index : indexes) {
mainModel.altDoubleClick(index);
@@ -986,6 +1143,18 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
filterCardsType(evt.getModifiers(), evt.getActionCommand());
}//GEN-LAST:event_tbLandActionPerformed
+ private void chkNamesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkNamesActionPerformed
+ // TODO add your handling code here:
+ }//GEN-LAST:event_chkNamesActionPerformed
+
+ private void chkTypesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkTypesActionPerformed
+ // TODO add your handling code here:
+ }//GEN-LAST:event_chkTypesActionPerformed
+
+ private void chkRulesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkRulesActionPerformed
+ // TODO add your handling code here:
+ }//GEN-LAST:event_chkRulesActionPerformed
+
private void toggleViewMode() {
if (currentView instanceof CardGrid) {
jToggleListView.setSelected(true);
@@ -1008,8 +1177,8 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
}
}
- public List asList(final int[] is) {
- List list = new ArrayList<>();
+ public java.util.List asList(final int[] is) {
+ java.util.List list = new ArrayList<>();
for (int i : is) {
list.add(i);
}
@@ -1034,14 +1203,16 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
private javax.swing.JScrollPane cardSelectorScrollPane;
private javax.swing.JComboBox cbExpansionSet;
private javax.swing.JComboBox cbSortBy;
+ private javax.swing.JCheckBox chkNames;
private javax.swing.JCheckBox chkPiles;
+ private javax.swing.JCheckBox chkRules;
+ private javax.swing.JCheckBox chkTypes;
private javax.swing.JButton jButtonAddToMain;
private javax.swing.JButton jButtonAddToSideboard;
private javax.swing.JButton jButtonClean;
private javax.swing.JButton jButtonRemoveFromMain;
private javax.swing.JButton jButtonRemoveFromSideboard;
private javax.swing.JButton jButtonSearch;
- private javax.swing.JLabel jLabelSearch;
private javax.swing.JToolBar.Separator jSeparator1;
private javax.swing.JToolBar.Separator jSeparator2;
private javax.swing.JToolBar.Separator jSeparator3;
diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java
index 4dcfba71424..c215382b40b 100644
--- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java
+++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java
@@ -305,7 +305,7 @@ public final class GamePanel extends javax.swing.JPanel {
this.players.clear();
this.playersWhoLeft.clear();
- if (jLayeredPane!= null) {
+ if (jLayeredPane != null) {
jLayeredPane.remove(abilityPicker);
jLayeredPane.remove(DialogManager.getManager(gameId));
}
@@ -1439,8 +1439,7 @@ public final class GamePanel extends javax.swing.JPanel {
bigCard.setBorder(new LineBorder(Color.black, 1, true));
int c = JComponent.WHEN_IN_FOCUSED_WINDOW;
-
-
+
btnToggleMacro.setContentAreaFilled(false);
btnToggleMacro.setBorder(new EmptyBorder(BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, BORDER_SIZE));
btnToggleMacro.setIcon(new ImageIcon(ImageManagerImpl.instance.getToggleRecordMacroButtonImage()));
@@ -1804,24 +1803,24 @@ public final class GamePanel extends javax.swing.JPanel {
pnlReplay.setLayout(gl_pnlReplay);
gl_pnlReplay.setHorizontalGroup(
gl_pnlReplay.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(gl_pnlReplay.createSequentialGroup()
- .addComponent(btnPreviousPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(btnPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(btnStopReplay, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(btnNextPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(btnSkipForward, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addGroup(gl_pnlReplay.createSequentialGroup()
+ .addComponent(btnPreviousPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(btnPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(btnStopReplay, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(btnNextPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(btnSkipForward, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE))
);
gl_pnlReplay.setVerticalGroup(
gl_pnlReplay.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(btnSkipForward, 0, 0, Short.MAX_VALUE)
- .addComponent(btnNextPlay, 0, 0, Short.MAX_VALUE)
- .addComponent(btnStopReplay, 0, 0, Short.MAX_VALUE)
- .addComponent(btnPlay, 0, 0, Short.MAX_VALUE)
- .addComponent(btnPreviousPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 31, Short.MAX_VALUE)
+ .addComponent(btnSkipForward, 0, 0, Short.MAX_VALUE)
+ .addComponent(btnNextPlay, 0, 0, Short.MAX_VALUE)
+ .addComponent(btnStopReplay, 0, 0, Short.MAX_VALUE)
+ .addComponent(btnPlay, 0, 0, Short.MAX_VALUE)
+ .addComponent(btnPreviousPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 31, Short.MAX_VALUE)
);
// Game info panel (buttons on the right panel)
@@ -1837,9 +1836,9 @@ public final class GamePanel extends javax.swing.JPanel {
.addComponent(btnSkipToEndStepBeforeYourTurn)
)
.addGroup(gl_pnlShortCuts.createSequentialGroup()
- .addComponent(btnToggleMacro)
.addComponent(txtHoldPriority)
.addComponent(txtSpellsCast)
+ /*.addComponent(btnToggleMacro)*/
.addComponent(btnSwitchHands)
.addComponent(btnCancelSkip)
.addComponent(btnConcede)
@@ -1872,7 +1871,7 @@ public final class GamePanel extends javax.swing.JPanel {
.addComponent(btnSkipToEndStepBeforeYourTurn)
)
.addGroup(gl_pnlShortCuts.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
- .addComponent(btnToggleMacro)
+ /*.addComponent(btnToggleMacro)*/
.addComponent(txtHoldPriority)
.addComponent(txtSpellsCast)
.addComponent(btnSwitchHands)
@@ -1935,46 +1934,46 @@ public final class GamePanel extends javax.swing.JPanel {
javax.swing.GroupLayout gl_helperHandButtonsStackArea = new javax.swing.GroupLayout(pnlHelperHandButtonsStackArea);
gl_helperHandButtonsStackArea.setHorizontalGroup(
gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING)
- .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup()
- // .addGap(0)
- .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING)
- .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup()
- .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING)
- .addComponent(helper, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(handContainer, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup()
+ // .addGap(0)
+ .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING)
+ .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup()
+ .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING)
+ .addComponent(helper, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(handContainer, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ )
+ .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING)
+ .addComponent(pnlShortCuts, 410, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
+ .addComponent(stackObjects, 410, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
+ )
)
- .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING)
- .addComponent(pnlShortCuts, 410, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
- .addComponent(stackObjects, 410, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
- )
- )
- .addGap(0)
- //.addComponent(jPhases, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup()
- .addComponent(pnlBattlefield, GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
- .addComponent(phasesContainer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- )))
+ .addGap(0)
+ //.addComponent(jPhases, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup()
+ .addComponent(pnlBattlefield, GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
+ .addComponent(phasesContainer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+ )))
);
gl_helperHandButtonsStackArea.setVerticalGroup(
gl_helperHandButtonsStackArea.createParallelGroup(Alignment.TRAILING)
- .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup()
- .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING)
- .addComponent(pnlBattlefield, GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
- .addComponent(phasesContainer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- )
- //.addPreferredGap(ComponentPlacement.RELATED)
- .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING)
- .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup()
- .addGap(2)
- .addComponent(pnlShortCuts, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(stackObjects, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+ .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup()
+ .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING)
+ .addComponent(pnlBattlefield, GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
+ .addComponent(phasesContainer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
)
- .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup()
- .addComponent(helper, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(handContainer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+ //.addPreferredGap(ComponentPlacement.RELATED)
+ .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING)
+ .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup()
+ .addGap(2)
+ .addComponent(pnlShortCuts, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+ .addComponent(stackObjects, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+ )
+ .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup()
+ .addComponent(helper, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+ .addComponent(handContainer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
+ )
)
)
- )
);
pnlHelperHandButtonsStackArea.setLayout(gl_helperHandButtonsStackArea);
@@ -2007,11 +2006,11 @@ public final class GamePanel extends javax.swing.JPanel {
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jSplitPane0, javax.swing.GroupLayout.DEFAULT_SIZE, 1078, Short.MAX_VALUE)
+ .addComponent(jSplitPane0, javax.swing.GroupLayout.DEFAULT_SIZE, 1078, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jSplitPane0, javax.swing.GroupLayout.DEFAULT_SIZE, 798, Short.MAX_VALUE)
+ .addComponent(jSplitPane0, javax.swing.GroupLayout.DEFAULT_SIZE, 798, Short.MAX_VALUE)
);
}
@@ -2103,7 +2102,7 @@ public final class GamePanel extends javax.swing.JPanel {
message.setGameId(gameId);
MageFrame.getInstance().showUserRequestDialog(message);
}
-
+
private void btnToggleMacroActionPerformed(java.awt.event.ActionEvent evt) {
SessionHandler.sendPlayerAction(PlayerAction.TOGGLE_RECORD_MACRO, gameId, null);
AudioManager.playOnSkipButton();
diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.form b/Mage.Client/src/main/java/mage/client/table/TablesPanel.form
index 30e1a8e2284..b764e017700 100644
--- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.form
+++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.form
@@ -39,7 +39,7 @@
-
+
diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java
index d9aad35135b..4e14af92622 100644
--- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java
+++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java
@@ -33,12 +33,28 @@
*/
package mage.client.table;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.beans.PropertyVetoException;
+import java.io.File;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
import mage.cards.decks.importer.DeckImporterUtil;
import mage.client.MageFrame;
import mage.client.SessionHandler;
import mage.client.chat.ChatPanelBasic;
import mage.client.components.MageComponents;
import mage.client.dialog.*;
+import static mage.client.dialog.PreferencesDialog.KEY_TABLES_COLUMNS_ORDER;
+import static mage.client.dialog.PreferencesDialog.KEY_TABLES_COLUMNS_WIDTH;
+import static mage.client.table.TablesPanel.PASSWORDED;
import mage.client.util.ButtonColumn;
import mage.client.util.GUISizeHelper;
import mage.client.util.IgnoreList;
@@ -55,25 +71,6 @@ import mage.view.TableView;
import mage.view.UserRequestMessage;
import org.apache.log4j.Logger;
-import javax.swing.*;
-import javax.swing.table.AbstractTableModel;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.beans.PropertyVetoException;
-import java.io.File;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.List;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-
-import static mage.client.dialog.PreferencesDialog.KEY_TABLES_COLUMNS_ORDER;
-import static mage.client.dialog.PreferencesDialog.KEY_TABLES_COLUMNS_WIDTH;
-import static mage.client.table.TablesPanel.PASSWORDED;
-
/**
*
* @author BetaSteward_at_googlemail.com
@@ -94,7 +91,7 @@ public class TablesPanel extends javax.swing.JPanel {
private NewTableDialog newTableDialog;
private NewTournamentDialog newTournamentDialog;
private final GameChooser gameChooser;
- private List messages;
+ private java.util.List messages;
private int currentMessage;
private final MageTableRowSorter activeTablesSorter;
@@ -231,7 +228,7 @@ public class TablesPanel extends javax.swing.JPanel {
String action = (String) matchesModel.getValueAt(modelRow, MatchesTableModel.ACTION_COLUMN);
switch (action) {
case "Replay":
- List gameList = matchesModel.getListofGames(modelRow);
+ java.util.List gameList = matchesModel.getListofGames(modelRow);
if (gameList != null && !gameList.isEmpty()) {
if (gameList.size() == 1) {
SessionHandler.replayGame(gameList.get(0));
@@ -486,7 +483,7 @@ public class TablesPanel extends javax.swing.JPanel {
protected void reloadMessages() {
// reload server messages
- List serverMessages = SessionHandler.getServerMessages();
+ java.util.List serverMessages = SessionHandler.getServerMessages();
synchronized (this) {
this.messages = serverMessages;
this.currentMessage = 0;
@@ -525,7 +522,7 @@ public class TablesPanel extends javax.swing.JPanel {
public void setTableFilter() {
// state
- List> stateFilterList = new ArrayList<>();
+ java.util.List> stateFilterList = new ArrayList<>();
if (btnStateWaiting.isSelected()) {
stateFilterList.add(RowFilter.regexFilter("Waiting", TableTableModel.COLUMN_STATUS));
}
@@ -534,7 +531,7 @@ public class TablesPanel extends javax.swing.JPanel {
}
// type
- List> typeFilterList = new ArrayList<>();
+ java.util.List> typeFilterList = new ArrayList<>();
if (btnTypeMatch.isSelected()) {
typeFilterList.add(RowFilter.regexFilter("Two|Commander|Free|Tiny|Momir", TableTableModel.COLUMN_GAME_TYPE));
}
@@ -546,7 +543,7 @@ public class TablesPanel extends javax.swing.JPanel {
}
// format
- List> formatFilterList = new ArrayList<>();
+ java.util.List> formatFilterList = new ArrayList<>();
if (btnFormatBlock.isSelected()) {
formatFilterList.add(RowFilter.regexFilter("^Constructed.*Block", TableTableModel.COLUMN_DECK_TYPE));
}
@@ -575,7 +572,7 @@ public class TablesPanel extends javax.swing.JPanel {
formatFilterList.add(RowFilter.regexFilter("^Momir Basic|^Constructed - Pauper|^Constructed - Frontier|^Constructed - Extended|^Constructed - Eternal|^Constructed - Historical|^Constructed - Super|^Constructed - Freeform|^Australian Highlander|^Canadian Highlander|^Constructed - Old", TableTableModel.COLUMN_DECK_TYPE));
}
- List> skillFilterList = new ArrayList<>();
+ java.util.List> skillFilterList = new ArrayList<>();
if (btnSkillBeginner.isSelected()) {
skillFilterList.add(RowFilter.regexFilter(SkillLevel.BEGINNER.toString(), TableTableModel.COLUMN_SKILL));
}
@@ -586,7 +583,7 @@ public class TablesPanel extends javax.swing.JPanel {
skillFilterList.add(RowFilter.regexFilter(SkillLevel.SERIOUS.toString(), TableTableModel.COLUMN_SKILL));
}
- List> ratingFilterList = new ArrayList<>();
+ java.util.List> ratingFilterList = new ArrayList<>();
if (btnRated.isSelected()) {
ratingFilterList.add(RowFilter.regexFilter("^Rated", TableTableModel.COLUMN_RATING));
}
@@ -595,7 +592,7 @@ public class TablesPanel extends javax.swing.JPanel {
}
// Password
- List> passwordFilterList = new ArrayList<>();
+ java.util.List> passwordFilterList = new ArrayList<>();
if (btnOpen.isSelected()) {
passwordFilterList.add(RowFilter.regexFilter("^$", TableTableModel.COLUMN_PASSWORD));
}
@@ -604,7 +601,7 @@ public class TablesPanel extends javax.swing.JPanel {
}
// Hide games of ignored players
- List> ignoreListFilterList = new ArrayList<>();
+ java.util.List> ignoreListFilterList = new ArrayList<>();
String serverAddress = SessionHandler.getSession().getServerHostname().orElseGet(() -> "");
final Set ignoreListCopy = IgnoreList.ignoreList(serverAddress);
if (!ignoreListCopy.isEmpty()) {
@@ -622,7 +619,7 @@ public class TablesPanel extends javax.swing.JPanel {
|| passwordFilterList.isEmpty()) { // no selection
activeTablesSorter.setRowFilter(RowFilter.regexFilter("Nothing", TableTableModel.COLUMN_SKILL));
} else {
- List> filterList = new ArrayList<>();
+ java.util.List> filterList = new ArrayList<>();
if (stateFilterList.size() > 1) {
filterList.add(RowFilter.orFilter(stateFilterList));
@@ -1418,7 +1415,7 @@ class UpdateTablesTask extends SwingWorker> {
protected Void doInBackground() throws Exception {
while (!isCancelled()) {
Collection tables = SessionHandler.getTables(roomId);
- if (!tables.isEmpty()) {
+ if (tables != null) {
this.publish(tables);
}
TimeUnit.SECONDS.sleep(3);
@@ -1427,7 +1424,7 @@ class UpdateTablesTask extends SwingWorker> {
}
@Override
- protected void process(List> view) {
+ protected void process(java.util.List> view) {
panel.updateTables(view.get(0));
count++;
if (count > 60) {
@@ -1471,7 +1468,7 @@ class UpdatePlayersTask extends SwingWorker> {
}
@Override
- protected void process(List> roomUserInfo) {
+ protected void process(java.util.List> roomUserInfo) {
chat.setRoomUserInfo(roomUserInfo);
}
@@ -1549,7 +1546,7 @@ class MatchesTableModel extends AbstractTableModel {
return "";
}
- public List getListofGames(int row) {
+ public java.util.List getListofGames(int row) {
return matches[row].getGames();
}
@@ -1613,7 +1610,7 @@ class UpdateMatchesTask extends SwingWorker> {
}
@Override
- protected void process(List> view) {
+ protected void process(java.util.List> view) {
panel.updateMatches(view.get(0));
}
@@ -1635,7 +1632,7 @@ class GameChooser extends JPopupMenu {
}
- public void show(List games, Point p) {
+ public void show(java.util.List games, Point p) {
if (p == null) {
return;
}
diff --git a/Mage.Client/src/main/java/mage/client/util/gui/GuiDisplayUtil.java b/Mage.Client/src/main/java/mage/client/util/gui/GuiDisplayUtil.java
index d2deeea32db..293231595b7 100644
--- a/Mage.Client/src/main/java/mage/client/util/gui/GuiDisplayUtil.java
+++ b/Mage.Client/src/main/java/mage/client/util/gui/GuiDisplayUtil.java
@@ -1,5 +1,8 @@
package mage.client.util.gui;
+import java.awt.*;
+import java.util.ArrayList;
+import javax.swing.*;
import mage.client.MageFrame;
import mage.client.util.GUISizeHelper;
import mage.constants.*;
@@ -10,10 +13,6 @@ import org.jdesktop.swingx.JXPanel;
import org.mage.card.arcane.ManaSymbols;
import org.mage.card.arcane.UI;
-import javax.swing.*;
-import java.awt.*;
-import java.util.ArrayList;
-
public final class GuiDisplayUtil {
private static final Font cardNameFont = new Font("Calibri", Font.BOLD, 15);
diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java
index 8249f277f80..02e639ba193 100644
--- a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java
+++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java
@@ -26,7 +26,6 @@ import mage.client.constants.Constants;
import mage.client.dialog.PreferencesDialog;
import mage.client.util.sets.ConstructedFormats;
import mage.remote.Connection;
-import mage.util.RandomUtil;
import net.java.truevfs.access.TFile;
import net.java.truevfs.access.TFileOutputStream;
import net.java.truevfs.access.TVFS;
@@ -107,7 +106,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
p0.add(jLabel1);
p0.add(Box.createVerticalStrut(5));
ComboBoxModel jComboBox1Model = new DefaultComboBoxModel(new String[]{
- // "magiccards.info",
+ // "magiccards.info",
"wizards.com",
"mythicspoiler.com",
"tokens.mtg.onl", //"mtgimage.com (HQ)",
@@ -127,7 +126,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
jComboBox1.setAlignmentX(Component.LEFT_ALIGNMENT);
jComboBox1.addActionListener(e -> {
JComboBox cb = (JComboBox) e.getSource();
- switch (cb.getSelectedIndex()) {
+ switch (cb.getSelectedIndex() + 1) {
case 0:
cardImageSource = MagicCardsImageSource.instance;
break;
diff --git a/Mage.Common/pom.xml b/Mage.Common/pom.xml
index ad208f35978..128e85256ba 100644
--- a/Mage.Common/pom.xml
+++ b/Mage.Common/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-root
- 1.4.24
+ 1.4.25
mage-common
diff --git a/Mage.Common/src/main/java/mage/utils/MageVersion.java b/Mage.Common/src/main/java/mage/utils/MageVersion.java
index 7c567df7b2b..867e0d7a849 100644
--- a/Mage.Common/src/main/java/mage/utils/MageVersion.java
+++ b/Mage.Common/src/main/java/mage/utils/MageVersion.java
@@ -40,8 +40,8 @@ public class MageVersion implements Serializable, Comparable {
*/
public final static int MAGE_VERSION_MAJOR = 1;
public final static int MAGE_VERSION_MINOR = 4;
- public final static int MAGE_VERSION_PATCH = 24;
- public final static String MAGE_VERSION_MINOR_PATCH = "V3";
+ public final static int MAGE_VERSION_PATCH = 25;
+ public final static String MAGE_VERSION_MINOR_PATCH = "V0";
public final static String MAGE_VERSION_INFO = "";
private final int major;
diff --git a/Mage.Plugins/Mage.Counter.Plugin/pom.xml b/Mage.Plugins/Mage.Counter.Plugin/pom.xml
index d285273f7f6..c0caea8e84c 100644
--- a/Mage.Plugins/Mage.Counter.Plugin/pom.xml
+++ b/Mage.Plugins/Mage.Counter.Plugin/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-plugins
- 1.4.24
+ 1.4.25
mage-counter-plugin
diff --git a/Mage.Plugins/pom.xml b/Mage.Plugins/pom.xml
index 8562bbb68b6..a839dd87eb1 100644
--- a/Mage.Plugins/pom.xml
+++ b/Mage.Plugins/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-root
- 1.4.24
+ 1.4.25
mage-plugins
diff --git a/Mage.Server.Console/pom.xml b/Mage.Server.Console/pom.xml
index f5d0506f72a..463763841ad 100644
--- a/Mage.Server.Console/pom.xml
+++ b/Mage.Server.Console/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 1.4.24
+ 1.4.25
org.mage
diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml
index cf44137297a..ce6ba038aa9 100644
--- a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml
+++ b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-deck-constructed
diff --git a/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml b/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml
index 2bf3742952a..d2faa06b074 100644
--- a/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml
+++ b/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-deck-limited
diff --git a/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml
index d654d973e66..800112bc85e 100644
--- a/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-game-canadianhighlanderduel
diff --git a/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml
index 12b6f88e8a8..9d7aed28fae 100644
--- a/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-game-commanderduel
diff --git a/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml
index ab523a9fe1a..cad0fd770bc 100644
--- a/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-game-commanderfreeforall
diff --git a/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml
index 6c33316cc92..e0908806aeb 100644
--- a/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-game-freeforall
diff --git a/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml
index b17f01f4dc1..bd5d6b34e4c 100644
--- a/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-game-momirduel
diff --git a/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml
index 4df4d733b14..84942c56c10 100644
--- a/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-game-tinyleadersduel
diff --git a/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml
index 0a80e4c370b..ca274fb980b 100644
--- a/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml
+++ b/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-game-twoplayerduel
diff --git a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml
index 684eacda572..75089fbbf06 100644
--- a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-player-ai-draftbot
diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml
index 8a1739ee54c..80968f19660 100644
--- a/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-player-ai-ma
diff --git a/Mage.Server.Plugins/Mage.Player.AI/pom.xml b/Mage.Server.Plugins/Mage.Player.AI/pom.xml
index 11d0f5e1a9c..fdfa27f9baf 100644
--- a/Mage.Server.Plugins/Mage.Player.AI/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.AI/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-player-ai
diff --git a/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml b/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml
index 0018d9200f5..73c1a33e593 100644
--- a/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-player-ai-mcts
diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml b/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml
index f846f475ff7..0f7bb70257e 100644
--- a/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-player-aiminimax
diff --git a/Mage.Server.Plugins/Mage.Player.Human/pom.xml b/Mage.Server.Plugins/Mage.Player.Human/pom.xml
index e2ee8c6cb06..dcfdc05152c 100644
--- a/Mage.Server.Plugins/Mage.Player.Human/pom.xml
+++ b/Mage.Server.Plugins/Mage.Player.Human/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-player-human
diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java
index 4e3225cc759..3c46ffe05f1 100644
--- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java
+++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java
@@ -87,7 +87,6 @@ public class HumanPlayer extends PlayerImpl {
protected static FilterAttackingCreature filterAttack = new FilterAttackingCreature();
protected static FilterBlockingCreature filterBlock = new FilterBlockingCreature();
protected final Choice replacementEffectChoice;
-
private static final Logger logger = Logger.getLogger(HumanPlayer.class);
protected HashSet autoSelectReplacementEffects = new HashSet<>();
@@ -119,9 +118,26 @@ public class HumanPlayer extends PlayerImpl {
public HumanPlayer(final HumanPlayer player) {
super(player);
+ this.replacementEffectChoice = player.replacementEffectChoice;
this.autoSelectReplacementEffects.addAll(autoSelectReplacementEffects);
this.currentlyUnpaidMana = player.currentlyUnpaidMana;
- this.replacementEffectChoice = player.replacementEffectChoice;
+
+ this.triggerAutoOrderAbilityFirst.addAll(player.triggerAutoOrderAbilityFirst);
+ this.triggerAutoOrderAbilityLast.addAll(player.triggerAutoOrderAbilityLast);
+ this.triggerAutoOrderNameFirst.addAll(player.triggerAutoOrderNameFirst);
+ this.triggerAutoOrderNameLast.addAll(player.triggerAutoOrderNameLast);
+
+ this.requestAutoAnswerId.putAll(player.requestAutoAnswerId);
+ this.requestAutoAnswerText.putAll(player.requestAutoAnswerText);
+
+ this.holdingPriority = player.holdingPriority;
+
+ this.actionQueue.addAll(player.actionQueue);
+ this.actionQueueSaved.addAll(player.actionQueueSaved);
+ this.actionIterations = player.actionIterations;
+ this.recordingMacro = player.recordingMacro;
+ this.macroTriggeredSelectionFlag = player.macroTriggeredSelectionFlag;
+ this.activatingMacro = player.activatingMacro;
}
protected boolean isExecutingMacro() {
@@ -134,6 +150,7 @@ public class HumanPlayer extends PlayerImpl {
if (actionQueue.isEmpty() && actionIterations > 0 && !actionQueueSaved.isEmpty()) {
actionQueue = new LinkedList(actionQueueSaved);
actionIterations--;
+// logger.info("MACRO iteration: " + actionIterations);
}
PlayerResponse action = actionQueue.poll();
if (action != null) {
@@ -158,6 +175,11 @@ public class HumanPlayer extends PlayerImpl {
protected void waitForResponse(Game game) {
if (isExecutingMacro()) {
pullResponseFromQueue(game);
+// logger.info("MACRO pull from queue: " + response.toString());
+// try {
+// TimeUnit.MILLISECONDS.sleep(1000);
+// } catch (InterruptedException e) {
+// }
return;
}
response.clear();
@@ -166,7 +188,7 @@ public class HumanPlayer extends PlayerImpl {
synchronized (response) {
try {
response.wait();
- logger.debug("Got response from player: " + getId());
+ logger.info("Got response from player: " + response.toString());
} catch (InterruptedException ex) {
logger.error("Response error for player " + getName() + " gameId: " + game.getId(), ex);
} finally {
@@ -174,7 +196,7 @@ public class HumanPlayer extends PlayerImpl {
}
}
if (recordingMacro && !macroTriggeredSelectionFlag) {
- logger.debug("Adding an action " + response);
+// logger.info("Adding an action " + response);
actionQueueSaved.add(new PlayerResponse(response));
}
}
diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/PlayerResponse.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/PlayerResponse.java
index fc7b27bed87..2f1e5871c29 100644
--- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/PlayerResponse.java
+++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/PlayerResponse.java
@@ -24,8 +24,7 @@
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
-*/
-
+ */
package mage.player.human;
import java.io.Serializable;
@@ -44,29 +43,25 @@ public class PlayerResponse implements Serializable {
private Integer responseInteger;
private ManaType responseManaType;
private UUID responseManaTypePlayerId;
-
+
public PlayerResponse() {
clear();
}
-
+
+ @Override
public String toString() {
- return new StringBuilder((responseString == null) ? "null" : responseString)
- .append(',')
- .append(responseUUID)
- .append(',')
- .append(responseBoolean)
- .append(',')
- .append(responseInteger)
- .append(',')
- .append(responseManaType)
- .append(',')
- .append(responseManaTypePlayerId).toString();
+ return ((responseString == null) ? "null" : responseString)
+ + ',' + responseUUID
+ + ',' + responseBoolean
+ + ',' + responseInteger
+ + ',' + responseManaType
+ + ',' + responseManaTypePlayerId;
}
-
+
public PlayerResponse(PlayerResponse other) {
copy(other);
}
-
+
public void copy(PlayerResponse other) {
responseString = other.responseString;
responseUUID = other.responseUUID;
diff --git a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml
index 1a23ebb769b..6dc1d6a64ce 100644
--- a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml
+++ b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-tournament-boosterdraft
diff --git a/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml
index ed1fe7838e5..e9ce701b75c 100644
--- a/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml
+++ b/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-tournament-constructed
diff --git a/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml b/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml
index 247a8bddff5..08aa67f7b9b 100644
--- a/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml
+++ b/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-server-plugins
- 1.4.24
+ 1.4.25
mage-tournament-sealed
diff --git a/Mage.Server.Plugins/pom.xml b/Mage.Server.Plugins/pom.xml
index 3573e2a2127..fd60041fdea 100644
--- a/Mage.Server.Plugins/pom.xml
+++ b/Mage.Server.Plugins/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 1.4.24
+ 1.4.25
mage-server-plugins
diff --git a/Mage.Server/pom.xml b/Mage.Server/pom.xml
index b206132209c..0edcb6ec86f 100644
--- a/Mage.Server/pom.xml
+++ b/Mage.Server/pom.xml
@@ -6,7 +6,7 @@
org.mage
mage-root
- 1.4.24
+ 1.4.25
mage-server
diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java
index 0046d625c07..1787d6739ed 100644
--- a/Mage.Server/src/main/java/mage/server/game/GameController.java
+++ b/Mage.Server/src/main/java/mage/server/game/GameController.java
@@ -27,6 +27,11 @@
*/
package mage.server.game;
+import java.io.*;
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.concurrent.*;
+import java.util.zip.GZIPOutputStream;
import mage.MageException;
import mage.abilities.Ability;
import mage.cards.Card;
@@ -61,12 +66,6 @@ import mage.view.ChatMessage.MessageColor;
import mage.view.ChatMessage.MessageType;
import org.apache.log4j.Logger;
-import java.io.*;
-import java.util.*;
-import java.util.Map.Entry;
-import java.util.concurrent.*;
-import java.util.zip.GZIPOutputStream;
-
/**
* @author BetaSteward_at_googlemail.com
*/
@@ -271,8 +270,8 @@ public class GameController implements GameCallback {
};
PriorityTimer timer = new PriorityTimer(count, delayMs, executeOnNoTimeLeft);
- timers.put(playerId, timer);
timer.init(game.getId());
+ timers.put(playerId, timer);
return timer;
}
@@ -983,6 +982,7 @@ public class GameController implements GameCallback {
@FunctionalInterface
interface Command {
+
void execute(UUID player);
}
diff --git a/Mage.Sets/pom.xml b/Mage.Sets/pom.xml
index 0d466cc360a..e1d245474af 100644
--- a/Mage.Sets/pom.xml
+++ b/Mage.Sets/pom.xml
@@ -7,7 +7,7 @@
org.mage
mage-root
- 1.4.24
+ 1.4.25
org.mage
diff --git a/Mage.Sets/src/mage/cards/a/Aetherspouts.java b/Mage.Sets/src/mage/cards/a/Aetherspouts.java
index f4d11cda396..3e8466c2064 100644
--- a/Mage.Sets/src/mage/cards/a/Aetherspouts.java
+++ b/Mage.Sets/src/mage/cards/a/Aetherspouts.java
@@ -27,8 +27,6 @@
*/
package mage.cards.a;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.*;
@@ -44,6 +42,10 @@ import mage.players.Player;
import mage.players.PlayerList;
import mage.target.TargetCard;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -102,8 +104,8 @@ class AetherspoutsEffect extends OneShotEffect {
Player player = game.getPlayer(game.getActivePlayerId());
Player activePlayer = player;
do {
- ArrayList permanentsToTop = new ArrayList<>();
- ArrayList permanentsToBottom = new ArrayList<>();
+ List permanentsToTop = new ArrayList<>();
+ List permanentsToBottom = new ArrayList<>();
for (Permanent permanent:game.getState().getBattlefield().getActivePermanents(new FilterAttackingCreature(), player.getId(), source.getSourceId(), game)) {
if (permanent.getOwnerId().equals(player.getId())) {
if (player.chooseUse(outcome, "Put " + permanent.getLogName() + " to the top? (else it goes to bottom)", source, game)) {
@@ -117,7 +119,7 @@ class AetherspoutsEffect extends OneShotEffect {
}
// cards to top
Cards cards = new CardsImpl();
- ArrayList toLibrary = new ArrayList<>();
+ List toLibrary = new ArrayList<>();
for (Permanent permanent: permanentsToTop) {
if (permanent instanceof PermanentToken) {
toLibrary.add(permanent);
diff --git a/Mage.Sets/src/mage/cards/a/ArsenalThresher.java b/Mage.Sets/src/mage/cards/a/ArsenalThresher.java
index 925ac2da937..4ec764a971c 100644
--- a/Mage.Sets/src/mage/cards/a/ArsenalThresher.java
+++ b/Mage.Sets/src/mage/cards/a/ArsenalThresher.java
@@ -27,8 +27,6 @@
*/
package mage.cards.a;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AsEntersBattlefieldAbility;
@@ -48,6 +46,10 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCardInHand;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author jeffwadsworth
@@ -110,7 +112,7 @@ class ArsenalThresherEffect extends OneShotEffect {
}
if (arsenalThresher != null) {
controller.revealCards(arsenalThresher.getIdName(), cards, game);
- ArrayList appliedEffects = (ArrayList) this.getValue("appliedEffects"); // the basic event is the EntersBattlefieldEvent, so use already applied replacement effects from that event
+ List appliedEffects = (ArrayList) this.getValue("appliedEffects"); // the basic event is the EntersBattlefieldEvent, so use already applied replacement effects from that event
arsenalThresher.addCounters(CounterType.P1P1.createInstance(cards.size()), source, game, appliedEffects);
}
}
diff --git a/Mage.Sets/src/mage/cards/a/AthreosGodOfPassage.java b/Mage.Sets/src/mage/cards/a/AthreosGodOfPassage.java
index 093b7ff0df8..3e888169ba4 100644
--- a/Mage.Sets/src/mage/cards/a/AthreosGodOfPassage.java
+++ b/Mage.Sets/src/mage/cards/a/AthreosGodOfPassage.java
@@ -39,6 +39,7 @@ import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect;
import mage.abilities.keyword.IndestructibleAbility;
+import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
@@ -49,7 +50,6 @@ import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.events.ZoneChangeEvent;
-import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetOpponent;
@@ -67,7 +67,7 @@ public class AthreosGodOfPassage extends CardImpl {
}
public AthreosGodOfPassage(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{1}{W}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{1}{W}{B}");
addSuperType(SuperType.LEGENDARY);
this.subtype.add(SubType.GOD);
@@ -118,7 +118,7 @@ class AthreosGodOfPassageReturnEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
UUID creatureId = (UUID) this.getValue("creatureId");
- Permanent creature = game.getPermanentOrLKIBattlefield(creatureId);
+ Card creature = game.getCard(creatureId);
if (creature != null) {
Player opponent = game.getPlayer(source.getFirstTarget());
boolean paid = false;
@@ -133,7 +133,7 @@ class AthreosGodOfPassageReturnEffect extends OneShotEffect {
}
if (opponent == null || !paid) {
if (game.getState().getZone(creature.getId()) == Zone.GRAVEYARD) {
- controller.moveCards(game.getCard(creatureId), Zone.HAND, source, game);
+ controller.moveCards(creature, Zone.HAND, source, game);
}
}
}
@@ -171,8 +171,7 @@ class AthreosDiesCreatureTriggeredAbility extends TriggeredAbilityImpl {
public boolean checkTrigger(GameEvent event, Game game) {
ZoneChangeEvent zEvent = (ZoneChangeEvent) event;
if (zEvent.getFromZone() == Zone.BATTLEFIELD && zEvent.getToZone() == Zone.GRAVEYARD) {
- Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD);
- if (permanent != null && filter.match(permanent, sourceId, controllerId, game)) {
+ if (zEvent.getTarget() != null && filter.match(zEvent.getTarget(), sourceId, controllerId, game)) {
for (Effect effect : this.getEffects()) {
effect.setValue("creatureId", event.getTargetId());
}
diff --git a/Mage.Sets/src/mage/cards/b/Balance.java b/Mage.Sets/src/mage/cards/b/Balance.java
index f44a8a49f29..8bb7ed6ded1 100644
--- a/Mage.Sets/src/mage/cards/b/Balance.java
+++ b/Mage.Sets/src/mage/cards/b/Balance.java
@@ -27,8 +27,6 @@
*/
package mage.cards.b;
-import java.util.HashMap;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.*;
@@ -43,6 +41,10 @@ import mage.players.Player;
import mage.target.common.TargetCardInHand;
import mage.target.common.TargetControlledPermanent;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
/**
*
* @author emerald000
@@ -156,7 +158,7 @@ class BalanceEffect extends OneShotEffect {
//Cards in hand
int minCard = Integer.MAX_VALUE;
- HashMap cardsToDiscard = new HashMap<>(2);
+ Map cardsToDiscard = new HashMap<>(2);
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
Player player = game.getPlayer(playerId);
if (player != null) {
diff --git a/Mage.Sets/src/mage/cards/b/BlastfireBolt.java b/Mage.Sets/src/mage/cards/b/BlastfireBolt.java
index ea0ce6df855..723e0243687 100644
--- a/Mage.Sets/src/mage/cards/b/BlastfireBolt.java
+++ b/Mage.Sets/src/mage/cards/b/BlastfireBolt.java
@@ -27,8 +27,6 @@
*/
package mage.cards.b;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DamageTargetEffect;
@@ -41,6 +39,10 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author Quercitron
@@ -89,7 +91,7 @@ class DestroyAllAttachedEquipmentEffect extends OneShotEffect {
if (controller != null) {
Permanent target = game.getPermanent(source.getFirstTarget());
if (target != null) {
- ArrayList attachments = new ArrayList<>(target.getAttachments());
+ List attachments = new ArrayList<>(target.getAttachments());
for (UUID attachmentId : attachments) {
Permanent attachment = game.getPermanent(attachmentId);
if (attachment != null && attachment.getSubtype(game).contains("Equipment")) {
diff --git a/Mage.Sets/src/mage/cards/b/BlazingTorch.java b/Mage.Sets/src/mage/cards/b/BlazingTorch.java
index 83239ba3522..805ccc9972b 100644
--- a/Mage.Sets/src/mage/cards/b/BlazingTorch.java
+++ b/Mage.Sets/src/mage/cards/b/BlazingTorch.java
@@ -55,7 +55,7 @@ import mage.target.common.TargetCreatureOrPlayer;
public class BlazingTorch extends CardImpl {
public BlazingTorch(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
this.subtype.add("Equipment");
// Equipped creature can't be blocked by Vampires or Zombies. (!this is a static ability of the equipment)
@@ -95,7 +95,7 @@ class BlazingTorchEvasionEffect extends RestrictionEffect {
Permanent equipment = game.getPermanent(source.getSourceId());
if (equipment != null && equipment.getAttachedTo() != null) {
Permanent equipped = game.getPermanent(equipment.getAttachedTo());
- if (permanent.getId().equals(equipped.getId())) {
+ if (equipped != null && permanent.getId().equals(equipped.getId())) {
return true;
}
}
diff --git a/Mage.Sets/src/mage/cards/b/BorderlandExplorer.java b/Mage.Sets/src/mage/cards/b/BorderlandExplorer.java
index c45fe1d49ad..45d4e97e353 100644
--- a/Mage.Sets/src/mage/cards/b/BorderlandExplorer.java
+++ b/Mage.Sets/src/mage/cards/b/BorderlandExplorer.java
@@ -44,6 +44,7 @@ import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetDiscard;
import java.util.HashMap;
+import java.util.Map;
import java.util.UUID;
/**
@@ -95,9 +96,9 @@ class BorderlandExplorerEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
// Store for each player the cards to discard, that's important because all discard shall happen at the same time
- HashMap cardsToDiscard = new HashMap<>();
+ Map cardsToDiscard = new HashMap<>();
// Store for each player the lands to reveal, that's important because all reveals shall happen at the same time
- HashMap cardsToReveal = new HashMap<>();
+ Map cardsToReveal = new HashMap<>();
if (controller != null) {
// choose cards to discard
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
diff --git a/Mage.Sets/src/mage/cards/c/CallToTheKindred.java b/Mage.Sets/src/mage/cards/c/CallToTheKindred.java
index 7e2d3a616ec..84aefe9db62 100644
--- a/Mage.Sets/src/mage/cards/c/CallToTheKindred.java
+++ b/Mage.Sets/src/mage/cards/c/CallToTheKindred.java
@@ -27,8 +27,6 @@
*/
package mage.cards.c;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.OnEventTriggeredAbility;
@@ -53,6 +51,10 @@ import mage.target.TargetCard;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author North
@@ -122,7 +124,7 @@ class CallToTheKindredEffect extends OneShotEffect {
if (!creature.getAbilities().contains(ChangelingAbility.getInstance())) {
StringBuilder sb = new StringBuilder("creature card with at least one subtype from: ");
- ArrayList> subtypes = new ArrayList<>();
+ List> subtypes = new ArrayList<>();
for (SubType subtype : creature.getSubtype(game)) {
subtypes.add(new SubtypePredicate(subtype));
sb.append(subtype).append(", ");
diff --git a/Mage.Sets/src/mage/cards/c/CapriciousEfreet.java b/Mage.Sets/src/mage/cards/c/CapriciousEfreet.java
index 08ef7263b5c..3e271eb297c 100644
--- a/Mage.Sets/src/mage/cards/c/CapriciousEfreet.java
+++ b/Mage.Sets/src/mage/cards/c/CapriciousEfreet.java
@@ -27,8 +27,6 @@
*/
package mage.cards.c;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
@@ -45,6 +43,10 @@ import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.util.RandomUtil;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author North
@@ -101,7 +103,7 @@ class CapriciousEfreetEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
- ArrayList targetPermanents = new ArrayList<>();
+ List targetPermanents = new ArrayList<>();
Permanent permanent = game.getPermanent(source.getTargets().get(0).getFirstTarget());
if (permanent != null) {
targetPermanents.add(permanent);
diff --git a/Mage.Sets/src/mage/cards/c/CarpetOfFlowers.java b/Mage.Sets/src/mage/cards/c/CarpetOfFlowers.java
index 3471e7dd525..d320f00f067 100644
--- a/Mage.Sets/src/mage/cards/c/CarpetOfFlowers.java
+++ b/Mage.Sets/src/mage/cards/c/CarpetOfFlowers.java
@@ -27,8 +27,6 @@
*/
package mage.cards.c;
-import java.util.LinkedHashSet;
-import java.util.UUID;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
@@ -50,6 +48,10 @@ import mage.game.events.GameEvent.EventType;
import mage.players.Player;
import mage.target.common.TargetOpponent;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author Plopman
@@ -163,7 +165,7 @@ class CarpetOfFlowersEffect extends ManaEffect {
}
int countMax = game.getBattlefield().count(filter, source.getSourceId(), source.getTargets().getFirstTarget(), game);
ChoiceImpl choiceCount = new ChoiceImpl(true);
- LinkedHashSet set = new LinkedHashSet<>(countMax + 1);
+ Set set = new LinkedHashSet<>(countMax + 1);
for (int i = 0; i <= countMax; i++) {
set.add(Integer.toString(i));
}
diff --git a/Mage.Sets/src/mage/cards/c/CarrionThrash.java b/Mage.Sets/src/mage/cards/c/CarrionThrash.java
index ccd450b0a4e..c2b6d9f23bd 100644
--- a/Mage.Sets/src/mage/cards/c/CarrionThrash.java
+++ b/Mage.Sets/src/mage/cards/c/CarrionThrash.java
@@ -37,7 +37,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.filter.common.FilterCreatureCard;
-import mage.filter.predicate.permanent.AnotherPredicate;
+import mage.filter.predicate.mageobject.AnotherCardPredicate;
import mage.target.common.TargetCardInYourGraveyard;
/**
@@ -47,12 +47,13 @@ import mage.target.common.TargetCardInYourGraveyard;
public class CarrionThrash extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("another creature card from your graveyard");
+
static {
- filter.add(new AnotherPredicate());
+ filter.add(new AnotherCardPredicate());
}
public CarrionThrash(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{R}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{R}{G}");
this.subtype.add("Viashino");
this.subtype.add("Warrior");
diff --git a/Mage.Sets/src/mage/cards/c/ChandraTorchOfDefiance.java b/Mage.Sets/src/mage/cards/c/ChandraTorchOfDefiance.java
index 0ca23c7cbaa..2d4f9cac48d 100644
--- a/Mage.Sets/src/mage/cards/c/ChandraTorchOfDefiance.java
+++ b/Mage.Sets/src/mage/cards/c/ChandraTorchOfDefiance.java
@@ -93,7 +93,7 @@ class ChandraTorchOfDefianceEffect extends OneShotEffect {
public ChandraTorchOfDefianceEffect() {
super(Outcome.Detriment);
- this.staticText = "Exile the top card of your library. You may cast that card. If you don't, Chandra, Torch of Defiance deals 2 damage to each opponent";
+ this.staticText = "Exile the top card of your library. You may cast that card. If you don't, {this} deals 2 damage to each opponent";
}
public ChandraTorchOfDefianceEffect(final ChandraTorchOfDefianceEffect effect) {
@@ -111,17 +111,12 @@ class ChandraTorchOfDefianceEffect extends OneShotEffect {
MageObject sourceObject = source.getSourceObject(game);
if (controller != null && sourceObject != null && controller.getLibrary().hasCards()) {
Library library = controller.getLibrary();
- Card card = library.removeFromTop(game);
+ Card card = library.getFromTop(game);
if (card != null) {
boolean exiledCardWasCast = false;
controller.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game, Zone.LIBRARY, true);
if (!card.getManaCost().isEmpty()) {
if (controller.chooseUse(Outcome.Benefit, "Cast the card? (You still pay the costs)", source, game) && !card.isLand()) {
-// LinkedHashMap useableAbilities = controller.getUseableActivatedAbilities(card, Zone.EXILED, game);
-// for (ActivatedAbility ability : useableAbilities.values()) {
-//
-// }
-// controller.activateAbility(useableAbilities, game);
exiledCardWasCast = controller.cast(card.getSpellAbility(), game, false);
}
}
diff --git a/Mage.Sets/src/mage/cards/c/CommitMemory.java b/Mage.Sets/src/mage/cards/c/CommitMemory.java
index 1ce9ffe6faa..9b3e4c7b683 100644
--- a/Mage.Sets/src/mage/cards/c/CommitMemory.java
+++ b/Mage.Sets/src/mage/cards/c/CommitMemory.java
@@ -72,7 +72,7 @@ public class CommitMemory extends SplitCard {
// Memory
// Aftermath
// Each player shuffles his or her hand and graveyard into his or her library, then draws seven cards.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addEffect(new MemoryEffect());
Effect effect = new DrawCardAllEffect(7);
effect.setText(", then draws seven cards");
diff --git a/Mage.Sets/src/mage/cards/c/Counterlash.java b/Mage.Sets/src/mage/cards/c/Counterlash.java
index 802ae542bde..b1ad8d92250 100644
--- a/Mage.Sets/src/mage/cards/c/Counterlash.java
+++ b/Mage.Sets/src/mage/cards/c/Counterlash.java
@@ -27,8 +27,6 @@
*/
package mage.cards.c;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
@@ -47,6 +45,10 @@ import mage.players.Player;
import mage.target.TargetSpell;
import mage.target.common.TargetCardInHand;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author BetaSteward
@@ -96,7 +98,7 @@ class CounterlashEffect extends OneShotEffect {
game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game);
if (player.chooseUse(Outcome.PutCardInPlay, "Cast a nonland card in your hand that shares a card type with that spell without paying its mana cost?", source, game)) {
FilterCard filter = new FilterCard();
- ArrayList> types = new ArrayList<>();
+ List> types = new ArrayList<>();
for (CardType type: stackObject.getCardType()) {
if (type != CardType.LAND) {
types.add(new CardTypePredicate(type));
diff --git a/Mage.Sets/src/mage/cards/c/CracklingDoom.java b/Mage.Sets/src/mage/cards/c/CracklingDoom.java
index 4642bf780b5..2b0f5b81874 100644
--- a/Mage.Sets/src/mage/cards/c/CracklingDoom.java
+++ b/Mage.Sets/src/mage/cards/c/CracklingDoom.java
@@ -27,8 +27,6 @@
*/
package mage.cards.c;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DamagePlayersEffect;
@@ -47,6 +45,10 @@ import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetControlledCreaturePermanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -92,7 +94,7 @@ class CracklingDoomEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
- ArrayList toSacrifice = new ArrayList<>();
+ List toSacrifice = new ArrayList<>();
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
if (controller.hasOpponent(playerId, game)) {
Player opponent = game.getPlayer(playerId);
diff --git a/Mage.Sets/src/mage/cards/c/CryptOfTheEternals.java b/Mage.Sets/src/mage/cards/c/CryptOfTheEternals.java
index 649261c106f..ffd18b00e59 100644
--- a/Mage.Sets/src/mage/cards/c/CryptOfTheEternals.java
+++ b/Mage.Sets/src/mage/cards/c/CryptOfTheEternals.java
@@ -1,7 +1,5 @@
package mage.cards.c;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.Mana;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.costs.common.TapSourceCost;
@@ -14,6 +12,10 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
public class CryptOfTheEternals extends CardImpl {
public CryptOfTheEternals(UUID ownerId, CardSetInfo setInfo) {
@@ -26,7 +28,7 @@ public class CryptOfTheEternals extends CardImpl {
this.addAbility(new ColorlessManaAbility());
// {1}, {T}: Add {U}, {B}, or {R} to your mana pool.
- ArrayList list = new ArrayList() {{
+ List list = new ArrayList() {{
add(Mana.BlueMana(1));
add(Mana.BlackMana(1));
add(Mana.RedMana(1));
diff --git a/Mage.Sets/src/mage/cards/c/CrypticGateway.java b/Mage.Sets/src/mage/cards/c/CrypticGateway.java
index 475caa9114f..8c17e28e5d1 100644
--- a/Mage.Sets/src/mage/cards/c/CrypticGateway.java
+++ b/Mage.Sets/src/mage/cards/c/CrypticGateway.java
@@ -27,9 +27,6 @@
*/
package mage.cards.c;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.Cost;
@@ -55,6 +52,10 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetControlledPermanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author spjspj
@@ -199,7 +200,7 @@ class CrypticGatewayEffect extends OneShotEffect {
changeling2 = true;
}
- ArrayList subtypes = new ArrayList<>();
+ List subtypes = new ArrayList<>();
for (SubType subtype : creature.getSubtype(game)) {
if (creature2.getSubtype(game).contains(subtype) || changeling2) {
diff --git a/Mage.Sets/src/mage/cards/c/CustodiSquire.java b/Mage.Sets/src/mage/cards/c/CustodiSquire.java
index 6e8df4337ab..ef9e3e62520 100644
--- a/Mage.Sets/src/mage/cards/c/CustodiSquire.java
+++ b/Mage.Sets/src/mage/cards/c/CustodiSquire.java
@@ -27,8 +27,6 @@
*/
package mage.cards.c;
-import java.util.HashMap;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -45,6 +43,10 @@ import mage.game.Game;
import mage.players.Player;
import mage.target.TargetCard;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -105,7 +107,7 @@ class CustodiSquireVoteEffect extends OneShotEffect {
Cards possibleCards = new CardsImpl();
possibleCards.addAll(controller.getGraveyard().getCards(filter, game));
if (!possibleCards.isEmpty()) {
- HashMap cardCounter = new HashMap<>();
+ Map cardCounter = new HashMap<>();
TargetCard target = new TargetCard(1, 1, Zone.GRAVEYARD, filter);
int maxCount = 1;
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
diff --git a/Mage.Sets/src/mage/cards/c/CutRibbons.java b/Mage.Sets/src/mage/cards/c/CutRibbons.java
index 30abdaf1aaa..ac1e6fa473e 100644
--- a/Mage.Sets/src/mage/cards/c/CutRibbons.java
+++ b/Mage.Sets/src/mage/cards/c/CutRibbons.java
@@ -23,12 +23,12 @@ public class CutRibbons extends SplitCard {
// Cut
// Cut deals 4 damage to target creature.
getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent());
- getLeftHalfCard().getSpellAbility().addEffect(new DamageTargetEffect(4));
+ getLeftHalfCard().getSpellAbility().addEffect(new DamageTargetEffect(4).setText("Cut deals 4 damage to target creature"));
// to
// Ribbons
// Each opponent loses X life.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addEffect(new LoseLifeOpponentsEffect(new ManacostVariableValue()));
}
diff --git a/Mage.Sets/src/mage/cards/d/DeadlyTempest.java b/Mage.Sets/src/mage/cards/d/DeadlyTempest.java
index 2ebdd3028fa..c7ee54d48c8 100644
--- a/Mage.Sets/src/mage/cards/d/DeadlyTempest.java
+++ b/Mage.Sets/src/mage/cards/d/DeadlyTempest.java
@@ -27,8 +27,6 @@
*/
package mage.cards.d;
-import java.util.HashMap;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
@@ -40,6 +38,10 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -83,15 +85,15 @@ class DeadlyTempestEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
- HashMap destroyedCreatures = new HashMap<>();
+ Map destroyedCreatures = new HashMap<>();
for (Permanent permanent : game.getBattlefield().getActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURE, source.getControllerId(), source.getSourceId(), game)) {
if (permanent.destroy(source.getSourceId(), game, false)) {
- int count = destroyedCreatures.containsKey(permanent.getControllerId()) ? destroyedCreatures.get(permanent.getControllerId()) : 0;
+ int count = destroyedCreatures.getOrDefault(permanent.getControllerId(), 0);
destroyedCreatures.put(permanent.getControllerId(), count + 1);
}
}
for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) {
- int count = destroyedCreatures.containsKey(playerId) ? destroyedCreatures.get(playerId) : 0;
+ int count = destroyedCreatures.getOrDefault(playerId, 0);
if (count > 0) {
Player player = game.getPlayer(playerId);
if (player != null) {
diff --git a/Mage.Sets/src/mage/cards/d/DescentOfTheDragons.java b/Mage.Sets/src/mage/cards/d/DescentOfTheDragons.java
index 4367a6a7b0e..da4c02d0cd1 100644
--- a/Mage.Sets/src/mage/cards/d/DescentOfTheDragons.java
+++ b/Mage.Sets/src/mage/cards/d/DescentOfTheDragons.java
@@ -27,8 +27,6 @@
*/
package mage.cards.d;
-import java.util.HashMap;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
@@ -42,6 +40,10 @@ import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetCreaturePermanent;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
/**
* @author jeffwadsworth
*/
@@ -86,7 +88,7 @@ class DescentOfTheDragonsEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
- HashMap playersWithTargets = new HashMap<>();
+ Map playersWithTargets = new HashMap<>();
for (Target target : source.getTargets()) {
for (UUID permanentId : target.getTargets()) {
Permanent permanent = game.getPermanent(permanentId);
diff --git a/Mage.Sets/src/mage/cards/d/DestinedLead.java b/Mage.Sets/src/mage/cards/d/DestinedLead.java
index 18824517760..af2b2dd4235 100644
--- a/Mage.Sets/src/mage/cards/d/DestinedLead.java
+++ b/Mage.Sets/src/mage/cards/d/DestinedLead.java
@@ -61,7 +61,7 @@ public class DestinedLead extends SplitCard {
// to
// Lead
// All creatures able to block target creature this turn must do so.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent());
getRightHalfCard().getSpellAbility().addEffect(new MustBeBlockedByAllTargetEffect(Duration.EndOfTurn));
}
diff --git a/Mage.Sets/src/mage/cards/d/DroidFactory.java b/Mage.Sets/src/mage/cards/d/DroidFactory.java
index 3078de3ca5b..e24e4ab60b6 100644
--- a/Mage.Sets/src/mage/cards/d/DroidFactory.java
+++ b/Mage.Sets/src/mage/cards/d/DroidFactory.java
@@ -27,8 +27,6 @@
*/
package mage.cards.d;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.ActivatedAbilityImpl;
import mage.abilities.costs.common.SacrificeSourceCost;
@@ -46,6 +44,10 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.mageobject.SupertypePredicate;
import mage.target.common.TargetCardInLibrary;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author Styxo
@@ -84,7 +86,7 @@ public class DroidFactory extends CardImpl {
addCost(new SacrificeSourceCost());
FilterCard filter = new FilterCard("basic Plains, Island or Swamp");
filter.add(new CardTypePredicate(CardType.LAND));
- ArrayList> subtypePredicates = new ArrayList<>();
+ List> subtypePredicates = new ArrayList<>();
subtypePredicates.add(new SubtypePredicate(SubType.SWAMP));
subtypePredicates.add(new SubtypePredicate(SubType.PLAINS));
subtypePredicates.add(new SubtypePredicate(SubType.ISLAND));
diff --git a/Mage.Sets/src/mage/cards/d/DuskDawn.java b/Mage.Sets/src/mage/cards/d/DuskDawn.java
index 247f8a50a0d..92db3e1321d 100644
--- a/Mage.Sets/src/mage/cards/d/DuskDawn.java
+++ b/Mage.Sets/src/mage/cards/d/DuskDawn.java
@@ -69,7 +69,7 @@ public class DuskDawn extends SplitCard {
// Dawn
// Return all creature cards with power less than or equal to 2 from your graveyard to your hand.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addEffect(new DawnEffect());
}
diff --git a/Mage.Sets/src/mage/cards/d/DwarvenArmorer.java b/Mage.Sets/src/mage/cards/d/DwarvenArmorer.java
index e0080af8131..2fe3a19de7c 100644
--- a/Mage.Sets/src/mage/cards/d/DwarvenArmorer.java
+++ b/Mage.Sets/src/mage/cards/d/DwarvenArmorer.java
@@ -27,8 +27,6 @@
*/
package mage.cards.d;
-import java.util.HashSet;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -52,6 +50,10 @@ import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
import mage.target.targetpointer.FixedTarget;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author LoneFox
@@ -84,7 +86,7 @@ public class DwarvenArmorer extends CardImpl {
class DwarvenArmorerEffect extends OneShotEffect {
- private static final HashSet choices = new HashSet<>();
+ private static final Set choices = new HashSet<>();
static {
choices.add("+0/+1");
diff --git a/Mage.Sets/src/mage/cards/e/EmptyShrineKannushi.java b/Mage.Sets/src/mage/cards/e/EmptyShrineKannushi.java
index 22927ff883f..5c76c4c55ba 100644
--- a/Mage.Sets/src/mage/cards/e/EmptyShrineKannushi.java
+++ b/Mage.Sets/src/mage/cards/e/EmptyShrineKannushi.java
@@ -27,8 +27,6 @@
*/
package mage.cards.e;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.ObjectColor;
@@ -45,6 +43,10 @@ import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -113,7 +115,7 @@ class EmptyShrineKannushiProtectionAbility extends ProtectionAbility {
}
}
- ArrayList> colorPredicates = new ArrayList<>();
+ List> colorPredicates = new ArrayList<>();
if (color.isBlack()) {
colorPredicates.add(new ColorPredicate(ObjectColor.BLACK));
}
diff --git a/Mage.Sets/src/mage/cards/e/EndHostilities.java b/Mage.Sets/src/mage/cards/e/EndHostilities.java
index 2f21308aca2..e3ec1656e4f 100644
--- a/Mage.Sets/src/mage/cards/e/EndHostilities.java
+++ b/Mage.Sets/src/mage/cards/e/EndHostilities.java
@@ -27,8 +27,6 @@
*/
package mage.cards.e;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
@@ -39,6 +37,10 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -83,7 +85,7 @@ class EndHostilitiesEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
- ArrayList toDestroy = new ArrayList<>();
+ List toDestroy = new ArrayList<>();
for (Permanent permanent : game.getBattlefield().getActivePermanents(controller.getId(), game)) {
if (permanent.isCreature()) {
toDestroy.add(permanent);
diff --git a/Mage.Sets/src/mage/cards/e/ErdwalIlluminator.java b/Mage.Sets/src/mage/cards/e/ErdwalIlluminator.java
index a44bf45d044..0f7112442b9 100644
--- a/Mage.Sets/src/mage/cards/e/ErdwalIlluminator.java
+++ b/Mage.Sets/src/mage/cards/e/ErdwalIlluminator.java
@@ -27,8 +27,6 @@
*/
package mage.cards.e;
-import java.util.HashMap;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.keyword.InvestigateEffect;
@@ -43,6 +41,10 @@ import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.watchers.Watcher;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
/**
* @author LevelX2
*/
@@ -106,7 +108,7 @@ class ErdwalIlluminatorTriggeredAbility extends TriggeredAbilityImpl {
class InvestigatedWatcher extends Watcher {
- private final HashMap timesInvestigated = new HashMap<>();
+ private final Map timesInvestigated = new HashMap<>();
public InvestigatedWatcher() {
super(InvestigatedWatcher.class.getSimpleName(), WatcherScope.GAME);
diff --git a/Mage.Sets/src/mage/cards/e/EyeOfSingularity.java b/Mage.Sets/src/mage/cards/e/EyeOfSingularity.java
index 18fae6cbd0d..229c7ae338f 100644
--- a/Mage.Sets/src/mage/cards/e/EyeOfSingularity.java
+++ b/Mage.Sets/src/mage/cards/e/EyeOfSingularity.java
@@ -27,9 +27,6 @@
*/
package mage.cards.e;
-import java.util.HashMap;
-import java.util.Objects;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -49,6 +46,11 @@ import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.UUID;
+
/**
*
* @author spjspj
@@ -101,8 +103,8 @@ class EyeOfSingularityETBEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
- HashMap cardNames = new HashMap<>();
- HashMap toDestroy = new HashMap<>();
+ Map cardNames = new HashMap<>();
+ Map toDestroy = new HashMap<>();
for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) {
String cardName = permanent.getName();
@@ -183,7 +185,7 @@ class EyeOfSingularityTriggeredEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
- HashMap toDestroy = new HashMap<>();
+ Map toDestroy = new HashMap<>();
Permanent etbPermanent = game.getPermanentOrLKIBattlefield(getTargetPointer().getFirst(game, source));
if (etbPermanent == null) {
diff --git a/Mage.Sets/src/mage/cards/f/FailureComply.java b/Mage.Sets/src/mage/cards/f/FailureComply.java
index 8ed7542bf46..4b5663e31df 100644
--- a/Mage.Sets/src/mage/cards/f/FailureComply.java
+++ b/Mage.Sets/src/mage/cards/f/FailureComply.java
@@ -63,7 +63,7 @@ public class FailureComply extends SplitCard {
// to
// Comply
// Choose a card name. Until your next turn, your opponents can't cast spells with the chosen name
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
Effect effect = new NameACardEffect(NameACardEffect.TypeOfName.ALL);
effect.setText("Choose a card name");
getRightHalfCard().getSpellAbility().addEffect(effect);
diff --git a/Mage.Sets/src/mage/cards/f/FaithsReward.java b/Mage.Sets/src/mage/cards/f/FaithsReward.java
index f0015b4a7fd..fb413646831 100644
--- a/Mage.Sets/src/mage/cards/f/FaithsReward.java
+++ b/Mage.Sets/src/mage/cards/f/FaithsReward.java
@@ -27,8 +27,6 @@
*/
package mage.cards.f;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
@@ -43,6 +41,10 @@ import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
import mage.watchers.Watcher;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author Loki
@@ -101,7 +103,7 @@ class FaithsRewardEffect extends OneShotEffect {
}
class FaithsRewardWatcher extends Watcher {
- ArrayList cards = new ArrayList<>();
+ List cards = new ArrayList<>();
public FaithsRewardWatcher() {
super(FaithsRewardWatcher.class.getSimpleName(), WatcherScope.GAME);
diff --git a/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java b/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java
index d249cf59642..cd3d3c33079 100644
--- a/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java
+++ b/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java
@@ -27,8 +27,6 @@
*/
package mage.cards.f;
-import java.util.HashMap;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
@@ -43,6 +41,10 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.players.Player;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -90,7 +92,7 @@ class FalkenrathGorgerEffect extends ContinuousEffectImpl {
}
- HashMap madnessAbilities = new HashMap<>(); // reuse the same ability for the same object
+ Map madnessAbilities = new HashMap<>(); // reuse the same ability for the same object
public FalkenrathGorgerEffect() {
super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
@@ -111,7 +113,7 @@ class FalkenrathGorgerEffect extends ContinuousEffectImpl {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
- HashMap usedMadnessAbilities = new HashMap<>();
+ Map usedMadnessAbilities = new HashMap<>();
// hand
for (Card card : controller.getHand().getCards(filter, game)) {
addMadnessToCard(game, card, usedMadnessAbilities);
@@ -136,7 +138,7 @@ class FalkenrathGorgerEffect extends ContinuousEffectImpl {
return false;
}
- private void addMadnessToCard(Game game, Card card, HashMap usedMadnessAbilities) {
+ private void addMadnessToCard(Game game, Card card, Map usedMadnessAbilities) {
MadnessAbility ability = madnessAbilities.get(card.getId());
if (ability == null) {
ability = new MadnessAbility(card, card.getSpellAbility().getManaCosts());
diff --git a/Mage.Sets/src/mage/cards/f/Fatespinner.java b/Mage.Sets/src/mage/cards/f/Fatespinner.java
index ae7794fb38c..e14082372bb 100644
--- a/Mage.Sets/src/mage/cards/f/Fatespinner.java
+++ b/Mage.Sets/src/mage/cards/f/Fatespinner.java
@@ -27,8 +27,6 @@
*/
package mage.cards.f;
-import java.util.HashSet;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
@@ -44,6 +42,10 @@ import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.players.Player;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author LoneFox
@@ -74,7 +76,7 @@ public class Fatespinner extends CardImpl {
class FatespinnerChooseEffect extends OneShotEffect {
- private static final HashSet choices = new HashSet<>();
+ private static final Set choices = new HashSet<>();
static {
choices.add("Draw step");
diff --git a/Mage.Sets/src/mage/cards/f/FiveAlarmFire.java b/Mage.Sets/src/mage/cards/f/FiveAlarmFire.java
index 9340a64f307..e78f9ce457e 100644
--- a/Mage.Sets/src/mage/cards/f/FiveAlarmFire.java
+++ b/Mage.Sets/src/mage/cards/f/FiveAlarmFire.java
@@ -27,8 +27,6 @@
*/
package mage.cards.f;
-import java.util.HashSet;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.SimpleActivatedAbility;
@@ -48,6 +46,10 @@ import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.target.common.TargetCreatureOrPlayer;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author Plopman
@@ -82,7 +84,7 @@ class FiveAlarmFireTriggeredAbility extends TriggeredAbilityImpl {
// Because a creature that is blocked by multiple creatures it deals damage to, only causes to add one counter to ,
// it's neccessary to remember which creature already triggered
- HashSet triggeringCreatures = new HashSet<>();
+ Set triggeringCreatures = new HashSet<>();
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent();
diff --git a/Mage.Sets/src/mage/cards/f/FlowstoneSculpture.java b/Mage.Sets/src/mage/cards/f/FlowstoneSculpture.java
index 69507915eeb..0d80865b79f 100644
--- a/Mage.Sets/src/mage/cards/f/FlowstoneSculpture.java
+++ b/Mage.Sets/src/mage/cards/f/FlowstoneSculpture.java
@@ -27,8 +27,6 @@
*/
package mage.cards.f;
-import java.util.HashSet;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -52,6 +50,10 @@ import mage.counters.CounterType;
import mage.game.Game;
import mage.players.Player;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author LoneFox
@@ -82,7 +84,7 @@ public class FlowstoneSculpture extends CardImpl {
class FlowstoneSculptureEffect extends OneShotEffect {
- private static final HashSet choices = new HashSet<>();
+ private static final Set choices = new HashSet<>();
static {
choices.add("+1/+1 counter");
diff --git a/Mage.Sets/src/mage/cards/f/ForgottenAncient.java b/Mage.Sets/src/mage/cards/f/ForgottenAncient.java
index 7513d62d574..e8fd0ea9749 100644
--- a/Mage.Sets/src/mage/cards/f/ForgottenAncient.java
+++ b/Mage.Sets/src/mage/cards/f/ForgottenAncient.java
@@ -27,8 +27,6 @@
*/
package mage.cards.f;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
@@ -51,6 +49,10 @@ import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetCreaturePermanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author Blinke
@@ -116,7 +118,7 @@ public class ForgottenAncient extends CardImpl {
}
int numCounters = sourcePermanent.getCounters(game).getCount(CounterType.P1P1);
- ArrayList counterMovements = new ArrayList<>();
+ List counterMovements = new ArrayList<>();
do {
Target target = new TargetCreaturePermanent(1, 1, filter, true);
diff --git a/Mage.Sets/src/mage/cards/g/GazeOfTheGorgon.java b/Mage.Sets/src/mage/cards/g/GazeOfTheGorgon.java
index 574af0a47a6..201d44b02bd 100644
--- a/Mage.Sets/src/mage/cards/g/GazeOfTheGorgon.java
+++ b/Mage.Sets/src/mage/cards/g/GazeOfTheGorgon.java
@@ -27,8 +27,6 @@
*/
package mage.cards.g;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
@@ -45,6 +43,10 @@ import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
import mage.watchers.common.BlockedAttackerWatcher;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -96,7 +98,7 @@ class GazeOfTheGorgonEffect extends OneShotEffect {
if (controller != null && targetCreature != null) {
BlockedAttackerWatcher watcher = (BlockedAttackerWatcher) game.getState().getWatchers().get(BlockedAttackerWatcher.class.getSimpleName());
if (watcher != null) {
- ArrayList toDestroy = new ArrayList<>();
+ List toDestroy = new ArrayList<>();
for (Permanent creature : game.getBattlefield().getActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURE, source.getControllerId(), source.getSourceId(), game)) {
if (!creature.getId().equals(targetCreature.getId())) {
if (watcher.creatureHasBlockedAttacker(creature, targetCreature, game) || watcher.creatureHasBlockedAttacker(targetCreature, creature, game)) {
diff --git a/Mage.Sets/src/mage/cards/g/GhastlyConscription.java b/Mage.Sets/src/mage/cards/g/GhastlyConscription.java
index 7db5f358670..cb18627fe33 100644
--- a/Mage.Sets/src/mage/cards/g/GhastlyConscription.java
+++ b/Mage.Sets/src/mage/cards/g/GhastlyConscription.java
@@ -27,7 +27,6 @@
*/
package mage.cards.g;
-import java.util.*;
import mage.MageObjectReference;
import mage.abilities.Ability;
import mage.abilities.costs.mana.ManaCosts;
@@ -47,6 +46,8 @@ import mage.game.Game;
import mage.players.Player;
import mage.target.TargetPlayer;
+import java.util.*;
+
/**
*
* @author LevelX2
@@ -92,7 +93,7 @@ class GhastlyConscriptionEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId());
Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source));
if (controller != null && targetPlayer != null) {
- ArrayList cardsToManifest = new ArrayList<>();
+ List cardsToManifest = new ArrayList<>();
for (Card card : targetPlayer.getGraveyard().getCards(new FilterCreatureCard(), game)) {
cardsToManifest.add(card);
controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true);
diff --git a/Mage.Sets/src/mage/cards/h/HarmonicConvergence.java b/Mage.Sets/src/mage/cards/h/HarmonicConvergence.java
index d62687d8362..a88d888181a 100644
--- a/Mage.Sets/src/mage/cards/h/HarmonicConvergence.java
+++ b/Mage.Sets/src/mage/cards/h/HarmonicConvergence.java
@@ -42,10 +42,7 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.TargetCard;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
/**
*
@@ -94,7 +91,7 @@ class HarmonicConvergenceEffect extends OneShotEffect {
source.getSourceId(),
game);
- HashMap> moveList = new HashMap<>();
+ Map> moveList = new HashMap<>();
for (Permanent permanent : enchantments) {
List list = moveList.computeIfAbsent(permanent.getControllerId(), k -> new ArrayList<>());
list.add(permanent);
diff --git a/Mage.Sets/src/mage/cards/h/HeavenEarth.java b/Mage.Sets/src/mage/cards/h/HeavenEarth.java
index 0dff7803efb..6fd3a88d329 100644
--- a/Mage.Sets/src/mage/cards/h/HeavenEarth.java
+++ b/Mage.Sets/src/mage/cards/h/HeavenEarth.java
@@ -1,53 +1,53 @@
-package mage.cards.h;
-
-import java.util.UUID;
-import mage.abilities.dynamicvalue.common.ManacostVariableValue;
-import mage.abilities.effects.common.DamageAllEffect;
-import mage.abilities.keyword.AftermathAbility;
-import mage.abilities.keyword.FlyingAbility;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.cards.SplitCard;
-import mage.constants.CardType;
-import mage.constants.SpellAbilityType;
-import mage.filter.common.FilterCreaturePermanent;
-import mage.filter.predicate.Predicates;
-import mage.filter.predicate.mageobject.AbilityPredicate;
-
-/**
- *
- * @author Styxo
- */
-public class HeavenEarth extends SplitCard {
-
- private static final FilterCreaturePermanent filterFlying = new FilterCreaturePermanent("creature with flying");
- private static final FilterCreaturePermanent filterWithouFlying = new FilterCreaturePermanent("creature without flying");
-
- static {
- filterFlying.add(new AbilityPredicate(FlyingAbility.class));
- filterWithouFlying.add(Predicates.not(new AbilityPredicate(FlyingAbility.class)));
- }
-
- public HeavenEarth(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, new CardType[]{CardType.SORCERY}, "{X}{G}", "{X}{R}{R}", SpellAbilityType.SPLIT_AFTERMATH);
-
- // Falling
- // Falling deals X damage to each creature with flying.
- getLeftHalfCard().getSpellAbility().addEffect(new DamageAllEffect(new ManacostVariableValue(), filterFlying));
-
- // to
- // Earth
- // Earth deals X damage to each creature without flying.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
- getRightHalfCard().getSpellAbility().addEffect(new DamageAllEffect(new ManacostVariableValue(), filterWithouFlying));
- }
-
- public HeavenEarth(final HeavenEarth card) {
- super(card);
- }
-
- @Override
- public HeavenEarth copy() {
- return new HeavenEarth(this);
- }
-}
+package mage.cards.h;
+
+import java.util.UUID;
+import mage.abilities.dynamicvalue.common.ManacostVariableValue;
+import mage.abilities.effects.common.DamageAllEffect;
+import mage.abilities.keyword.AftermathAbility;
+import mage.abilities.keyword.FlyingAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.cards.SplitCard;
+import mage.constants.CardType;
+import mage.constants.SpellAbilityType;
+import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.AbilityPredicate;
+
+/**
+ *
+ * @author Styxo
+ */
+public class HeavenEarth extends SplitCard {
+
+ private static final FilterCreaturePermanent filterFlying = new FilterCreaturePermanent("creature with flying");
+ private static final FilterCreaturePermanent filterWithouFlying = new FilterCreaturePermanent("creature without flying");
+
+ static {
+ filterFlying.add(new AbilityPredicate(FlyingAbility.class));
+ filterWithouFlying.add(Predicates.not(new AbilityPredicate(FlyingAbility.class)));
+ }
+
+ public HeavenEarth(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, new CardType[]{CardType.SORCERY}, "{X}{G}", "{X}{R}{R}", SpellAbilityType.SPLIT_AFTERMATH);
+
+ // Falling
+ // Falling deals X damage to each creature with flying.
+ getLeftHalfCard().getSpellAbility().addEffect(new DamageAllEffect(new ManacostVariableValue(), filterFlying));
+
+ // to
+ // Earth
+ // Earth deals X damage to each creature without flying.
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
+ getRightHalfCard().getSpellAbility().addEffect(new DamageAllEffect(new ManacostVariableValue(), filterWithouFlying));
+ }
+
+ public HeavenEarth(final HeavenEarth card) {
+ super(card);
+ }
+
+ @Override
+ public HeavenEarth copy() {
+ return new HeavenEarth(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/h/HedonistsTrove.java b/Mage.Sets/src/mage/cards/h/HedonistsTrove.java
index 0be70c68bb9..a024d4458a2 100644
--- a/Mage.Sets/src/mage/cards/h/HedonistsTrove.java
+++ b/Mage.Sets/src/mage/cards/h/HedonistsTrove.java
@@ -27,8 +27,6 @@
*/
package mage.cards.h;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -38,17 +36,17 @@ import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.AsThoughEffectType;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.Outcome;
-import mage.constants.Zone;
+import mage.constants.*;
import mage.game.ExileZone;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetOpponent;
import mage.util.CardUtil;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -100,7 +98,7 @@ class HedonistsTroveExileEffect extends OneShotEffect {
MageObject sourceObject = source.getSourceObject(game);
if (controller != null && targetPlayer != null && sourceObject != null) {
UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter());
- ArrayList graveyard = new ArrayList<>(targetPlayer.getGraveyard());
+ List graveyard = new ArrayList<>(targetPlayer.getGraveyard());
for (UUID cardId : graveyard) {
Card card = game.getCard(cardId);
if (card != null) {
diff --git a/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java b/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java
index cbbf3d80927..733e4d19c40 100644
--- a/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java
+++ b/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java
@@ -27,19 +27,11 @@
*/
package mage.cards.i;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Set;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.effects.OneShotEffect;
-import mage.cards.Card;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.cards.Cards;
-import mage.cards.CardsImpl;
+import mage.cards.*;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
@@ -52,6 +44,8 @@ import mage.players.Library;
import mage.players.Player;
import mage.target.TargetPermanent;
+import java.util.*;
+
/**
*
* @author LevelX2
@@ -112,7 +106,7 @@ class IndomitableCreativityEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId());
MageObject sourceObject = source.getSourceObject(game);
if (controller != null && sourceObject != null) {
- ArrayList destroyedPermanents = new ArrayList<>();
+ List destroyedPermanents = new ArrayList<>();
for (UUID targetId : getTargetPointer().getTargets(game, source)) {
Permanent target = game.getPermanent(targetId);
if (target != null) {
@@ -121,7 +115,7 @@ class IndomitableCreativityEffect extends OneShotEffect {
}
}
}
- HashMap cardsToReveal = new HashMap<>();
+ Map cardsToReveal = new HashMap<>();
for (Permanent permanent : destroyedPermanents) {
Player controllerOfDestroyedCreature = game.getPlayer(permanent.getControllerId());
diff --git a/Mage.Sets/src/mage/cards/i/InsultInjury.java b/Mage.Sets/src/mage/cards/i/InsultInjury.java
index b4721e71740..b4c272be79c 100644
--- a/Mage.Sets/src/mage/cards/i/InsultInjury.java
+++ b/Mage.Sets/src/mage/cards/i/InsultInjury.java
@@ -37,7 +37,7 @@ public class InsultInjury extends SplitCard {
// to
// Injury
// Injury deals 2 damage to target creature and 2 damage to target player.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent());
getRightHalfCard().getSpellAbility().addTarget(new TargetPlayer());
getRightHalfCard().getSpellAbility().addEffect(new InjuryEffect());
diff --git a/Mage.Sets/src/mage/cards/j/JediEnclave.java b/Mage.Sets/src/mage/cards/j/JediEnclave.java
index d14aeee4e44..3d8de85f884 100644
--- a/Mage.Sets/src/mage/cards/j/JediEnclave.java
+++ b/Mage.Sets/src/mage/cards/j/JediEnclave.java
@@ -27,8 +27,6 @@
*/
package mage.cards.j;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.ActivatedAbilityImpl;
import mage.abilities.costs.common.SacrificeSourceCost;
@@ -46,6 +44,10 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.mageobject.SupertypePredicate;
import mage.target.common.TargetCardInLibrary;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author Styxo
@@ -84,7 +86,7 @@ public class JediEnclave extends CardImpl {
addCost(new SacrificeSourceCost());
FilterCard filter = new FilterCard("basic Forest, Plains or Island");
filter.add(new CardTypePredicate(CardType.LAND));
- ArrayList> subtypePredicates = new ArrayList<>();
+ List> subtypePredicates = new ArrayList<>();
subtypePredicates.add(new SubtypePredicate(SubType.FOREST));
subtypePredicates.add(new SubtypePredicate(SubType.PLAINS));
subtypePredicates.add(new SubtypePredicate(SubType.ISLAND));
diff --git a/Mage.Sets/src/mage/cards/j/JodahsAvenger.java b/Mage.Sets/src/mage/cards/j/JodahsAvenger.java
index 688c4132a62..f8aa0ac350b 100644
--- a/Mage.Sets/src/mage/cards/j/JodahsAvenger.java
+++ b/Mage.Sets/src/mage/cards/j/JodahsAvenger.java
@@ -27,8 +27,6 @@
*/
package mage.cards.j;
-import java.util.HashSet;
-import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability;
@@ -44,16 +42,15 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.choices.Choice;
import mage.choices.ChoiceImpl;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.Layer;
-import mage.constants.Outcome;
-import mage.constants.SubLayer;
-import mage.constants.Zone;
+import mage.constants.*;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author Styxo
@@ -83,7 +80,7 @@ public class JodahsAvenger extends CardImpl {
class JodahsAvengerEffect extends ContinuousEffectImpl {
- private static final HashSet choices = new HashSet<>();
+ private static final Set choices = new HashSet<>();
private Ability gainedAbility;
static {
diff --git a/Mage.Sets/src/mage/cards/j/JungleVillage.java b/Mage.Sets/src/mage/cards/j/JungleVillage.java
index ef0485f7977..de3d303fc07 100644
--- a/Mage.Sets/src/mage/cards/j/JungleVillage.java
+++ b/Mage.Sets/src/mage/cards/j/JungleVillage.java
@@ -27,8 +27,6 @@
*/
package mage.cards.j;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.ActivatedAbilityImpl;
import mage.abilities.costs.common.SacrificeSourceCost;
@@ -46,6 +44,10 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.mageobject.SupertypePredicate;
import mage.target.common.TargetCardInLibrary;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author Styxo
@@ -84,7 +86,7 @@ public class JungleVillage extends CardImpl {
addCost(new SacrificeSourceCost());
FilterCard filter = new FilterCard("basic Mountain, Forest or Plains");
filter.add(new CardTypePredicate(CardType.LAND));
- ArrayList> subtypePredicates = new ArrayList<>();
+ List> subtypePredicates = new ArrayList<>();
subtypePredicates.add(new SubtypePredicate(SubType.PLAINS));
subtypePredicates.add(new SubtypePredicate(SubType.MOUNTAIN));
subtypePredicates.add(new SubtypePredicate(SubType.FAERIE));
diff --git a/Mage.Sets/src/mage/cards/k/KalitasBloodchiefOfGhet.java b/Mage.Sets/src/mage/cards/k/KalitasBloodchiefOfGhet.java
index 6398d8d338a..345edea0a4c 100644
--- a/Mage.Sets/src/mage/cards/k/KalitasBloodchiefOfGhet.java
+++ b/Mage.Sets/src/mage/cards/k/KalitasBloodchiefOfGhet.java
@@ -97,7 +97,12 @@ class KalitasDestroyEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source));
- if (permanent != null && permanent.destroy(source.getSourceId(), game, false)) { // if not destroyed or moved to other zone (replacement effect) it returns false
+ if (permanent != null && permanent.destroy(source.getSourceId(), game, false)) { // if not destroyed it returns false
+ if (permanent.getZoneChangeCounter(game) + 1 == game.getState().getZoneChangeCounter(permanent.getId())
+ && !game.getState().getZone(permanent.getId()).equals(Zone.GRAVEYARD)) {
+ // A replacement effect has moved the card to another zone as grvayard
+ return true;
+ }
new CreateTokenEffect(new KalitasVampireToken(permanent.getPower().getValue(), permanent.getToughness().getValue())).apply(game, source);
}
return true;
diff --git a/Mage.Sets/src/mage/cards/k/KillingWave.java b/Mage.Sets/src/mage/cards/k/KillingWave.java
index b5518f9d6ec..5624f39f0cc 100644
--- a/Mage.Sets/src/mage/cards/k/KillingWave.java
+++ b/Mage.Sets/src/mage/cards/k/KillingWave.java
@@ -27,10 +27,6 @@
*/
package mage.cards.k;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.dynamicvalue.common.ManacostVariableValue;
import mage.abilities.effects.OneShotEffect;
@@ -43,6 +39,8 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
+import java.util.*;
+
/**
*
* @author North
@@ -92,8 +90,8 @@ class KillingWaveEffect extends OneShotEffect {
int amount = (new ManacostVariableValue()).calculate(game, source, this);
if (amount > 0) {
- LinkedList sacrifices = new LinkedList<>();
- HashMap lifePaidAmounts = new HashMap<>();
+ List sacrifices = new LinkedList<>();
+ Map lifePaidAmounts = new HashMap<>();
FilterCreaturePermanent filter = new FilterCreaturePermanent();
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
diff --git a/Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java b/Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java
index 7bc07d76160..08e51eed354 100644
--- a/Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java
+++ b/Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java
@@ -27,9 +27,6 @@
*/
package mage.cards.k;
-import java.util.ArrayList;
-import java.util.Objects;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
@@ -46,6 +43,11 @@ import mage.players.PlayerList;
import mage.target.Target;
import mage.target.common.TargetCardInHand;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.UUID;
+
/**
* @author spjspj
*/
@@ -104,7 +106,7 @@ class KynaiosAndTirosEffect extends OneShotEffect {
Player currentPlayer = game.getPlayer(playerList.get());
UUID firstInactivePlayer = null;
Target target = new TargetCardInHand(filter);
- ArrayList noLandPlayers = new ArrayList<>();
+ List noLandPlayers = new ArrayList<>();
while (controller.canRespond()) {
if (currentPlayer != null && currentPlayer.canRespond() && game.getState().getPlayersInRange(controller.getId(), game).contains(currentPlayer.getId())) {
diff --git a/Mage.Sets/src/mage/cards/l/LunarAvenger.java b/Mage.Sets/src/mage/cards/l/LunarAvenger.java
index 232b503747b..898c98f150f 100644
--- a/Mage.Sets/src/mage/cards/l/LunarAvenger.java
+++ b/Mage.Sets/src/mage/cards/l/LunarAvenger.java
@@ -27,8 +27,6 @@
*/
package mage.cards.l;
-import java.util.HashSet;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -51,6 +49,10 @@ import mage.counters.CounterType;
import mage.game.Game;
import mage.players.Player;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author LoneFox
@@ -82,7 +84,7 @@ public class LunarAvenger extends CardImpl {
class LunarAvengerEffect extends OneShotEffect {
- private static final HashSet choices = new HashSet<>();
+ private static final Set choices = new HashSet<>();
static {
choices.add("Flying");
diff --git a/Mage.Sets/src/mage/cards/m/MaintenanceDroid.java b/Mage.Sets/src/mage/cards/m/MaintenanceDroid.java
index 3838f98de75..d609df426f4 100644
--- a/Mage.Sets/src/mage/cards/m/MaintenanceDroid.java
+++ b/Mage.Sets/src/mage/cards/m/MaintenanceDroid.java
@@ -27,8 +27,6 @@
*/
package mage.cards.m;
-import java.util.HashSet;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -51,6 +49,10 @@ import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInYourGraveyard;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author Styxo
@@ -90,7 +92,7 @@ public class MaintenanceDroid extends CardImpl {
class MaintenanceDroidEffect extends OneShotEffect {
- private static final HashSet choices = new HashSet<>();
+ private static final Set choices = new HashSet<>();
static {
choices.add("Remove a repair counter");
diff --git a/Mage.Sets/src/mage/cards/m/MarchOfSouls.java b/Mage.Sets/src/mage/cards/m/MarchOfSouls.java
index 95a5389873a..85c5f0b9224 100644
--- a/Mage.Sets/src/mage/cards/m/MarchOfSouls.java
+++ b/Mage.Sets/src/mage/cards/m/MarchOfSouls.java
@@ -27,9 +27,6 @@
*/
package mage.cards.m;
-import java.util.HashMap;
-import java.util.List;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
@@ -41,6 +38,11 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.SpiritWhiteToken;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
/**
*
* @author LoneFox
@@ -85,7 +87,7 @@ class MarchOfSoulsEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
List creatures = game.getBattlefield().getActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURES,
source.getControllerId(), source.getSourceId(), game);
- HashMap playersWithCreatures = new HashMap<>();
+ Map playersWithCreatures = new HashMap<>();
for(Permanent p : creatures) {
UUID controllerId = p.getControllerId();
if(p.destroy(source.getSourceId(), game, true)) {
diff --git a/Mage.Sets/src/mage/cards/m/MartyrsBond.java b/Mage.Sets/src/mage/cards/m/MartyrsBond.java
index 0e59377abdd..a453d4c548a 100644
--- a/Mage.Sets/src/mage/cards/m/MartyrsBond.java
+++ b/Mage.Sets/src/mage/cards/m/MartyrsBond.java
@@ -27,9 +27,6 @@
*/
package mage.cards.m;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
@@ -51,6 +48,10 @@ import mage.players.Player;
import mage.target.common.TargetControlledPermanent;
import mage.target.targetpointer.FixedTarget;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author spjspj
@@ -143,7 +144,7 @@ class MartyrsBondEffect extends OneShotEffect {
String message = "permanent with type (";
boolean firstType = true;
- ArrayList cardTypes = new ArrayList<>();
+ List cardTypes = new ArrayList<>();
for (CardType type : saccedPermanent.getCardType()) {
cardTypes.add(new CardTypePredicate(type));
diff --git a/Mage.Sets/src/mage/cards/m/MenacingOgre.java b/Mage.Sets/src/mage/cards/m/MenacingOgre.java
index 8e35302ace0..8b87182ea86 100644
--- a/Mage.Sets/src/mage/cards/m/MenacingOgre.java
+++ b/Mage.Sets/src/mage/cards/m/MenacingOgre.java
@@ -27,8 +27,6 @@
*/
package mage.cards.m;
-import java.util.HashMap;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -44,6 +42,10 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
/**
*
* @author jeffwadsworth
@@ -100,7 +102,7 @@ class MenacingOgreEffect extends OneShotEffect {
int number = 0;
Permanent menacingOgre = game.getPermanent(source.getSourceId());
String message = "Choose a number.";
- HashMap numberChosen = new HashMap<>();
+ Map numberChosen = new HashMap<>();
//players choose numbers
for (Player player : game.getPlayers().values()) {
diff --git a/Mage.Sets/src/mage/cards/m/Mindblaze.java b/Mage.Sets/src/mage/cards/m/Mindblaze.java
index 6bb549849ba..4745590f119 100644
--- a/Mage.Sets/src/mage/cards/m/Mindblaze.java
+++ b/Mage.Sets/src/mage/cards/m/Mindblaze.java
@@ -27,8 +27,6 @@
*/
package mage.cards.m;
-import java.util.HashSet;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
@@ -46,6 +44,10 @@ import mage.game.Game;
import mage.players.Player;
import mage.target.TargetPlayer;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author Loki
@@ -95,7 +97,7 @@ class MindblazeEffect extends OneShotEffect {
cardChoice.clearChoice();
Choice numberChoice = new ChoiceImpl();
numberChoice.setMessage("Choose a number greater than 0");
- HashSet numbers = new HashSet<>();
+ Set numbers = new HashSet<>();
for (int i = 1; i <= 4; i++) {
numbers.add(Integer.toString(i));
}
diff --git a/Mage.Sets/src/mage/cards/m/MitoticManipulation.java b/Mage.Sets/src/mage/cards/m/MitoticManipulation.java
index f22f373c828..350ea417fc2 100644
--- a/Mage.Sets/src/mage/cards/m/MitoticManipulation.java
+++ b/Mage.Sets/src/mage/cards/m/MitoticManipulation.java
@@ -27,9 +27,6 @@
*/
package mage.cards.m;
-import java.util.HashSet;
-import java.util.List;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.*;
@@ -43,6 +40,11 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.TargetCard;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author North
@@ -85,7 +87,7 @@ class MitoticManipulationEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
List permanents = game.getBattlefield().getActivePermanents(source.getControllerId(), game);
- HashSet permanentNames = new HashSet<>();
+ Set permanentNames = new HashSet<>();
FilterCard filter = new FilterCard("card to put onto the battlefield");
for (Permanent permanent : permanents) {
permanentNames.add(permanent.getName());
diff --git a/Mage.Sets/src/mage/cards/m/MouthFeed.java b/Mage.Sets/src/mage/cards/m/MouthFeed.java
index 5231431900e..e316d403229 100644
--- a/Mage.Sets/src/mage/cards/m/MouthFeed.java
+++ b/Mage.Sets/src/mage/cards/m/MouthFeed.java
@@ -38,7 +38,7 @@ public class MouthFeed extends SplitCard {
// to
// Feed
// Draw a card for each creature you control with power 3 or greater
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
Effect draw = new DrawCardSourceControllerEffect(new PermanentsOnBattlefieldCount(filterCreaturesYouControlPower3orGreater));
getRightHalfCard().getSpellAbility().addEffect(draw);
diff --git a/Mage.Sets/src/mage/cards/m/MultiformWonder.java b/Mage.Sets/src/mage/cards/m/MultiformWonder.java
index 0dfc1af1f13..565a14d7cfd 100644
--- a/Mage.Sets/src/mage/cards/m/MultiformWonder.java
+++ b/Mage.Sets/src/mage/cards/m/MultiformWonder.java
@@ -27,8 +27,6 @@
*/
package mage.cards.m;
-import java.util.HashSet;
-import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
@@ -46,16 +44,15 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.choices.Choice;
import mage.choices.ChoiceImpl;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.Layer;
-import mage.constants.Outcome;
-import mage.constants.SubLayer;
-import mage.constants.Zone;
+import mage.constants.*;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -90,7 +87,7 @@ public class MultiformWonder extends CardImpl {
class MultiformWonderEffect extends OneShotEffect {
- private static final HashSet choices = new HashSet<>();
+ private static final Set choices = new HashSet<>();
static {
choices.add("Flying");
diff --git a/Mage.Sets/src/mage/cards/n/NecromanticSelection.java b/Mage.Sets/src/mage/cards/n/NecromanticSelection.java
index f7145aea873..028bb54964b 100644
--- a/Mage.Sets/src/mage/cards/n/NecromanticSelection.java
+++ b/Mage.Sets/src/mage/cards/n/NecromanticSelection.java
@@ -27,19 +27,13 @@
*/
package mage.cards.n;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.ExileSpellEffect;
import mage.abilities.effects.common.continuous.BecomesBlackZombieAdditionEffect;
-import mage.cards.Card;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.cards.Cards;
-import mage.cards.CardsImpl;
+import mage.cards.*;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
@@ -56,6 +50,10 @@ import mage.target.Target;
import mage.target.common.TargetCardInGraveyard;
import mage.target.targetpointer.FixedTarget;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -110,7 +108,7 @@ class NecromanticSelectionEffect extends OneShotEffect {
}
}
FilterCard filter = new FilterCreatureCard("creature card put into a graveyard with " + sourceObject.getLogName());
- ArrayList> cardIdPredicates = new ArrayList<>();
+ List> cardIdPredicates = new ArrayList<>();
for (UUID cardId : cards) {
cardIdPredicates.add(new CardIdPredicate(cardId));
}
diff --git a/Mage.Sets/src/mage/cards/n/NeverReturn.java b/Mage.Sets/src/mage/cards/n/NeverReturn.java
index 3fa5d9af014..fdcd525b9f0 100644
--- a/Mage.Sets/src/mage/cards/n/NeverReturn.java
+++ b/Mage.Sets/src/mage/cards/n/NeverReturn.java
@@ -57,7 +57,7 @@ public class NeverReturn extends SplitCard {
// Return
// Exile target card from a graveyard. Create a 2/2 black Zombie creature token.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addEffect(new ExileTargetEffect());
getRightHalfCard().getSpellAbility().addTarget(new TargetCardInGraveyard());
getRightHalfCard().getSpellAbility().addEffect(new CreateTokenEffect(new ZombieToken()));
diff --git a/Mage.Sets/src/mage/cards/n/NicolBolasGodPharaoh.java b/Mage.Sets/src/mage/cards/n/NicolBolasGodPharaoh.java
index 376063b826e..8d66444e481 100644
--- a/Mage.Sets/src/mage/cards/n/NicolBolasGodPharaoh.java
+++ b/Mage.Sets/src/mage/cards/n/NicolBolasGodPharaoh.java
@@ -27,8 +27,6 @@
*/
package mage.cards.n;
-import java.util.HashMap;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
@@ -38,17 +36,8 @@ import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.ExileAllEffect;
-import mage.cards.Card;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.cards.Cards;
-import mage.cards.CardsImpl;
-import mage.constants.AsThoughEffectType;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.Outcome;
-import mage.constants.TargetController;
-import mage.constants.Zone;
+import mage.cards.*;
+import mage.constants.*;
import mage.filter.FilterCard;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterNonlandPermanent;
@@ -62,6 +51,10 @@ import mage.target.common.TargetCreatureOrPlayer;
import mage.target.common.TargetOpponent;
import mage.target.targetpointer.FixedTarget;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
/**
*
* @author Will
@@ -126,7 +119,7 @@ class NicolBolasGodPharaohPlusOneEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
// Store for each player the cards to exile, that's important because all exile shall happen at the same time
- HashMap cardsToExile = new HashMap<>();
+ Map cardsToExile = new HashMap<>();
// Each player chooses 2 cards to discard
for (UUID playerId : game.getOpponents(source.getControllerId())) {
Player player = game.getPlayer(playerId);
diff --git a/Mage.Sets/src/mage/cards/n/NoRestForTheWicked.java b/Mage.Sets/src/mage/cards/n/NoRestForTheWicked.java
index 553cc5bf112..f51889150a8 100644
--- a/Mage.Sets/src/mage/cards/n/NoRestForTheWicked.java
+++ b/Mage.Sets/src/mage/cards/n/NoRestForTheWicked.java
@@ -27,17 +27,11 @@
*/
package mage.cards.n;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.effects.OneShotEffect;
-import mage.cards.Card;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.cards.Cards;
-import mage.cards.CardsImpl;
+import mage.cards.*;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.WatcherScope;
@@ -48,6 +42,10 @@ import mage.game.events.ZoneChangeEvent;
import mage.players.Player;
import mage.watchers.Watcher;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author anonymous
@@ -115,7 +113,7 @@ class NoRestForTheWickedEffect extends OneShotEffect {
class NoRestForTheWickedWatcher extends Watcher {
- ArrayList cards;
+ List cards;
public NoRestForTheWickedWatcher() {
super(NoRestForTheWickedWatcher.class.getSimpleName(), WatcherScope.GAME);
diff --git a/Mage.Sets/src/mage/cards/n/NyleasPresence.java b/Mage.Sets/src/mage/cards/n/NyleasPresence.java
index cf1df00d1b8..9e02f48aeba 100644
--- a/Mage.Sets/src/mage/cards/n/NyleasPresence.java
+++ b/Mage.Sets/src/mage/cards/n/NyleasPresence.java
@@ -27,9 +27,6 @@
*/
package mage.cards.n;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.UUID;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -38,25 +35,19 @@ import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.keyword.EnchantAbility;
-import mage.abilities.mana.BasicManaAbility;
-import mage.abilities.mana.BlackManaAbility;
-import mage.abilities.mana.BlueManaAbility;
-import mage.abilities.mana.GreenManaAbility;
-import mage.abilities.mana.RedManaAbility;
-import mage.abilities.mana.WhiteManaAbility;
+import mage.abilities.mana.*;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.Layer;
-import mage.constants.Outcome;
-import mage.constants.SubLayer;
-import mage.constants.Zone;
+import mage.constants.*;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -77,7 +68,7 @@ public class NyleasPresence extends CardImpl {
// When Nylea's Presence enters the battlefield, draw a card.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)));
// Enchanted land is every basic land type in addition to its other types.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new NyleasPresenceLandTypeEffect("Swamp", "Mountain", "Forest", "Island", "Plains")));
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new NyleasPresenceLandTypeEffect()));
}
@@ -93,11 +84,11 @@ public class NyleasPresence extends CardImpl {
class NyleasPresenceLandTypeEffect extends ContinuousEffectImpl {
- protected ArrayList landTypes = new ArrayList<>();
+ protected List landTypes = new ArrayList<>();
- public NyleasPresenceLandTypeEffect(String... landNames) {
+ public NyleasPresenceLandTypeEffect() {
super(Duration.WhileOnBattlefield, Outcome.Detriment);
- landTypes.addAll(Arrays.asList(landNames));
+ landTypes.addAll(SubType.getBasicLands(false));
this.staticText = "Enchanted land is every basic land type in addition to its other types";
}
@@ -132,24 +123,24 @@ class NyleasPresenceLandTypeEffect extends ContinuousEffectImpl {
}
}
}
- if (mana.getGreen() == 0 && landTypes.contains("Forest")) {
+ if (mana.getGreen() == 0 && landTypes.contains(SubType.FOREST)) {
land.addAbility(new GreenManaAbility(), source.getSourceId(), game);
}
- if (mana.getRed() == 0 && landTypes.contains("Mountain")) {
+ if (mana.getRed() == 0 && landTypes.contains(SubType.MOUNTAIN)) {
land.addAbility(new RedManaAbility(), source.getSourceId(), game);
}
- if (mana.getBlue() == 0 && landTypes.contains("Island")) {
+ if (mana.getBlue() == 0 && landTypes.contains(SubType.ISLAND)) {
land.addAbility(new BlueManaAbility(), source.getSourceId(), game);
}
- if (mana.getWhite() == 0 && landTypes.contains("Plains")) {
+ if (mana.getWhite() == 0 && landTypes.contains(SubType.PLAINS)) {
land.addAbility(new WhiteManaAbility(), source.getSourceId(), game);
}
- if (mana.getBlack() == 0 && landTypes.contains("Swamp")) {
+ if (mana.getBlack() == 0 && landTypes.contains(SubType.SWAMP)) {
land.addAbility(new BlackManaAbility(), source.getSourceId(), game);
}
break;
case TypeChangingEffects_4:
- for (String subtype : landTypes) {
+ for (SubType subtype : landTypes) {
if (!land.getSubtype(game).contains(subtype)) {
land.getSubtype(game).add(subtype);
}
diff --git a/Mage.Sets/src/mage/cards/o/OnwardVictory.java b/Mage.Sets/src/mage/cards/o/OnwardVictory.java
index 4b260fb53e1..51aa05a0aab 100644
--- a/Mage.Sets/src/mage/cards/o/OnwardVictory.java
+++ b/Mage.Sets/src/mage/cards/o/OnwardVictory.java
@@ -56,7 +56,7 @@ public class OnwardVictory extends SplitCard {
// to
// Victory
// Target creature gains double strike until end of turn.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
Effect effect = new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn);
getRightHalfCard().getSpellAbility().addEffect(effect);
getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent());
diff --git a/Mage.Sets/src/mage/cards/o/OrzhovAdvokist.java b/Mage.Sets/src/mage/cards/o/OrzhovAdvokist.java
index 1bd58d36a19..831f9cf3e66 100644
--- a/Mage.Sets/src/mage/cards/o/OrzhovAdvokist.java
+++ b/Mage.Sets/src/mage/cards/o/OrzhovAdvokist.java
@@ -27,9 +27,6 @@
*/
package mage.cards.o;
-import java.util.ArrayList;
-import java.util.Objects;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
@@ -51,6 +48,11 @@ import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetControlledCreaturePermanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -100,8 +102,8 @@ class OrzhovAdvokistEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
- ArrayList players = new ArrayList<>();
- ArrayList creatures = new ArrayList<>();
+ List players = new ArrayList<>();
+ List creatures = new ArrayList<>();
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
Player player = game.getPlayer(playerId);
if (player != null) {
diff --git a/Mage.Sets/src/mage/cards/p/ParadisePlume.java b/Mage.Sets/src/mage/cards/p/ParadisePlume.java
new file mode 100644
index 00000000000..b1a1de9ddae
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/p/ParadisePlume.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.cards.p;
+
+import java.util.UUID;
+import mage.Mana;
+import mage.ObjectColor;
+import mage.abilities.Ability;
+import mage.abilities.TriggeredAbilityImpl;
+import mage.abilities.common.AsEntersBattlefieldAbility;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.effects.common.ChooseColorEffect;
+import mage.abilities.effects.common.GainLifeEffect;
+import mage.abilities.effects.common.ManaEffect;
+import mage.abilities.mana.SimpleManaAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.ColoredManaSymbol;
+import mage.constants.Outcome;
+import mage.constants.Zone;
+import mage.filter.FilterSpell;
+import mage.filter.predicate.mageobject.ColorPredicate;
+import mage.game.Game;
+import mage.game.events.GameEvent;
+import mage.game.stack.Spell;
+import mage.players.Player;
+
+/**
+ *
+ * @author jeffwadsworth
+ */
+public class ParadisePlume extends CardImpl {
+
+ public ParadisePlume(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
+
+ // As Paradise Plume enters the battlefield, choose a color.
+ this.addAbility(new AsEntersBattlefieldAbility(new ChooseColorEffect(Outcome.Detriment)));
+
+ // Whenever a player casts a spell of the chosen color, you may gain 1 life.
+ this.addAbility(new ParadisePlumeSpellCastTriggeredAbility());
+
+ // {tap}: Add one mana of the chosen color to your mana pool.
+ this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new ParadisePlumeManaEffect(), new TapSourceCost()));
+
+ }
+
+ public ParadisePlume(final ParadisePlume card) {
+ super(card);
+ }
+
+ @Override
+ public ParadisePlume copy() {
+ return new ParadisePlume(this);
+ }
+}
+
+class ParadisePlumeManaEffect extends ManaEffect {
+
+ public ParadisePlumeManaEffect() {
+ super();
+ staticText = "Add one mana of the chosen color to your mana pool";
+ }
+
+ public ParadisePlumeManaEffect(final ParadisePlumeManaEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player player = game.getPlayer(source.getControllerId());
+ if (player != null) {
+ player.getManaPool().addMana(getMana(game, source), game, source);
+ }
+ return true;
+ }
+
+ @Override
+ public Mana getMana(Game game, Ability source) {
+ ObjectColor color = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color");
+ if (color != null) {
+ return new Mana(ColoredManaSymbol.lookup(color.toString().charAt(0)));
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public ParadisePlumeManaEffect copy() {
+ return new ParadisePlumeManaEffect(this);
+ }
+}
+
+class ParadisePlumeSpellCastTriggeredAbility extends TriggeredAbilityImpl {
+
+ public ParadisePlumeSpellCastTriggeredAbility() {
+ super(Zone.BATTLEFIELD, new GainLifeEffect(1), true);
+ }
+
+ public ParadisePlumeSpellCastTriggeredAbility(final ParadisePlumeSpellCastTriggeredAbility ability) {
+ super(ability);
+ }
+
+ @Override
+ public boolean checkEventType(GameEvent event, Game game) {
+ return event.getType() == GameEvent.EventType.SPELL_CAST;
+ }
+
+ @Override
+ public boolean checkTrigger(GameEvent event, Game game) {
+ ObjectColor color = (ObjectColor) game.getState().getValue(getSourceId() + "_color");
+ if (color != null) {
+ FilterSpell filter = new FilterSpell();
+ filter.add(new ColorPredicate(color));
+ Spell spell = game.getStack().getSpell(event.getTargetId());
+ return (spell != null
+ && filter.match(spell, getSourceId(), getControllerId(), game));
+ }
+ return false;
+ }
+
+ @Override
+ public ParadisePlumeSpellCastTriggeredAbility copy() {
+ return new ParadisePlumeSpellCastTriggeredAbility(this);
+ }
+
+ @Override
+ public String getRule() {
+ return "Whenever a player casts a spell of the chosen color, " + super.getRule();
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/p/PentarchPaladin.java b/Mage.Sets/src/mage/cards/p/PentarchPaladin.java
new file mode 100644
index 00000000000..b85684c9258
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/p/PentarchPaladin.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.cards.p;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.ObjectColor;
+import mage.abilities.Ability;
+import mage.abilities.common.AsEntersBattlefieldAbility;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.TapSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.ChooseColorEffect;
+import mage.abilities.keyword.FlankingAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.Zone;
+import mage.filter.FilterPermanent;
+import mage.filter.predicate.mageobject.ColorPredicate;
+import mage.game.Game;
+import mage.target.TargetPermanent;
+import mage.abilities.effects.common.DestroyTargetEffect;
+
+/**
+ *
+ * @author jeffwadsworth
+ */
+public class PentarchPaladin extends CardImpl {
+
+ private final UUID originalId;
+ FilterPermanent filter = new FilterPermanent("permanent of the chosen color.");
+
+ public PentarchPaladin(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}{W}");
+
+ this.subtype.add("Human");
+ this.subtype.add("Knight");
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(3);
+
+ // Flanking
+ this.addAbility(new FlankingAbility());
+
+ // As Pentarch Paladin enters the battlefield, choose a color.
+ this.addAbility(new AsEntersBattlefieldAbility(new ChooseColorEffect(Outcome.Detriment)));
+
+ // {W}{W}, {tap}: Destroy target permanent of the chosen color.
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new ManaCostsImpl("{W}{W}"));
+ ability.addCost(new TapSourceCost());
+ ability.addTarget(new TargetPermanent(filter));
+ originalId = ability.getOriginalId();
+ this.addAbility(ability);
+
+ }
+
+ @Override
+ public void adjustTargets(Ability ability, Game game) {
+ ObjectColor color = (ObjectColor) game.getState().getValue(ability.getSourceId() + "_color");
+ if (ability.getOriginalId().equals(originalId)
+ && color != null) {
+ ability.getTargets().clear();
+ FilterPermanent filter = new FilterPermanent("permanent of the chosen color.");
+ filter.add(new ColorPredicate(color));
+ TargetPermanent target = new TargetPermanent(filter);
+ ability.addTarget(target);
+ }
+ }
+
+ public PentarchPaladin(final PentarchPaladin card) {
+ super(card);
+ this.originalId = card.originalId;
+ }
+
+ @Override
+ public PentarchPaladin copy() {
+ return new PentarchPaladin(this);
+ }
+}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/p/PlanarOverlay.java b/Mage.Sets/src/mage/cards/p/PlanarOverlay.java
index e51c8ae44cd..33e52bc2353 100644
--- a/Mage.Sets/src/mage/cards/p/PlanarOverlay.java
+++ b/Mage.Sets/src/mage/cards/p/PlanarOverlay.java
@@ -27,9 +27,6 @@
*/
package mage.cards.p;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
@@ -44,6 +41,10 @@ import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetLandPermanent;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author Styxo
@@ -91,9 +92,9 @@ class PlanarOverlayEffect extends OneShotEffect {
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
Player player = game.getPlayer(playerId);
if (player != null) {
- for (String landName : SubType.getBasicLands(false)) {
+ for (SubType landName : SubType.getBasicLands(false)) {
FilterLandPermanent filter = new FilterLandPermanent(landName + " to return to hand");
- filter.add(new SubtypePredicate(SubType.byDescription(landName)));
+ filter.add(new SubtypePredicate(landName));
filter.add(new ControllerPredicate(TargetController.YOU));
Target target = new TargetLandPermanent(1, 1, filter, true);
if (target.canChoose(source.getSourceId(), player.getId(), game)) {
diff --git a/Mage.Sets/src/mage/cards/p/PlaneswalkersMischief.java b/Mage.Sets/src/mage/cards/p/PlaneswalkersMischief.java
new file mode 100644
index 00000000000..c148859118d
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/p/PlaneswalkersMischief.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.cards.p;
+
+import java.util.List;
+import java.util.UUID;
+import mage.abilities.Ability;
+import mage.abilities.DelayedTriggeredAbility;
+import mage.abilities.common.ActivateAsSorceryActivatedAbility;
+import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
+import mage.abilities.condition.Condition;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.decorator.ConditionalOneShotEffect;
+import mage.abilities.effects.AsThoughEffect;
+import mage.abilities.effects.AsThoughEffectImpl;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.ReturnFromExileEffect;
+import mage.cards.Card;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.cards.Cards;
+import mage.cards.CardsImpl;
+import mage.constants.AsThoughEffectType;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Outcome;
+import mage.constants.Zone;
+import mage.game.Game;
+import mage.game.stack.Spell;
+import mage.players.Player;
+import mage.target.common.TargetOpponent;
+import mage.target.targetpointer.FixedTarget;
+import mage.watchers.common.SpellsCastWatcher;
+
+/**
+ *
+ * @author jeffwadsworth
+ */
+public class PlaneswalkersMischief extends CardImpl {
+
+ public PlaneswalkersMischief(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}");
+
+ // {3}{U}: Target opponent reveals a card at random from his or her hand. If it's an instant or sorcery card, exile it. You may cast it without paying its mana cost for as long as it remains exiled. At the beginning of the next end step, if you haven't cast it, return it to its owner's hand. Activate this ability only any time you could cast a sorcery.
+ Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new PlaneswalkersMischiefEffect(), new ManaCostsImpl("{3}{U}"));
+ ability.addTarget(new TargetOpponent());
+ this.addAbility(ability);
+
+ }
+
+ public PlaneswalkersMischief(final PlaneswalkersMischief card) {
+ super(card);
+ }
+
+ @Override
+ public PlaneswalkersMischief copy() {
+ return new PlaneswalkersMischief(this);
+ }
+}
+
+class PlaneswalkersMischiefEffect extends OneShotEffect {
+
+ public PlaneswalkersMischiefEffect() {
+ super(Outcome.Benefit);
+ this.staticText = "Target opponent reveals a card at random from his or her hand. If it's an instant or sorcery card, exile it. You may cast it without paying its mana cost for as long as it remains exiled. At the beginning of the next end step, if you haven't cast it, return it to its owner's hand.";
+ }
+
+ public PlaneswalkersMischiefEffect(final PlaneswalkersMischiefEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public PlaneswalkersMischiefEffect copy() {
+ return new PlaneswalkersMischiefEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player opponent = game.getPlayer(source.getFirstTarget());
+ if (opponent != null
+ && opponent.getHand().size() > 0) {
+ Card revealedCard = opponent.getHand().getRandom(game);
+ Cards cards = new CardsImpl();
+ cards.add(revealedCard);
+ opponent.revealCards("Planeswalker's Mischief Reveal", cards, game);
+ if (revealedCard.isInstant()
+ || revealedCard.isSorcery()) {
+ opponent.moveCardToExileWithInfo(revealedCard, source.getSourceId(), "Planeswalker's Mischief", source.getSourceId(), game, Zone.HAND, true);
+ AsThoughEffect effect = new PlaneswalkersMischiefCastFromExileEffect();
+ effect.setTargetPointer(new FixedTarget(revealedCard.getId()));
+ game.addEffect(effect, source);
+ OneShotEffect effect2 = new ReturnFromExileEffect(source.getSourceId(), Zone.HAND);
+ Condition condition = new SpellWasNotCastCondition(source.getSourceId(), revealedCard.getId());
+ ConditionalOneShotEffect effect3 = new ConditionalOneShotEffect(effect2, condition, "if you haven't cast it, return it to its owner's hand.");
+ DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect3);
+ game.addDelayedTriggeredAbility(delayedAbility, source);
+ return true;
+ }
+ }
+ return false;
+ }
+}
+
+class PlaneswalkersMischiefCastFromExileEffect extends AsThoughEffectImpl {
+
+ PlaneswalkersMischiefCastFromExileEffect() {
+ super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.Custom, Outcome.Benefit);
+ staticText = "You may cast that card without paying its mana cost as long as it remains exiled";
+ }
+
+ PlaneswalkersMischiefCastFromExileEffect(final PlaneswalkersMischiefCastFromExileEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ return true;
+ }
+
+ @Override
+ public PlaneswalkersMischiefCastFromExileEffect copy() {
+ return new PlaneswalkersMischiefCastFromExileEffect(this);
+ }
+
+ @Override
+ public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) {
+ if (targetPointer.getTargets(game, source).contains(objectId)
+ && game.getState().getZone(objectId) == Zone.EXILED) {
+ Player player = game.getPlayer(source.getControllerId());
+ Card card = game.getCard(objectId);
+ if (player != null
+ && card != null) {
+ player.setCastSourceIdWithAlternateMana(objectId, null, card.getSpellAbility().getCosts());
+ return true;
+ }
+ }
+ return false;
+ }
+}
+
+class SpellWasNotCastCondition implements Condition {
+
+ protected UUID exileId;
+ protected UUID cardId;
+
+ public SpellWasNotCastCondition(UUID exileId, UUID cardId) {
+ this.exileId = exileId;
+ this.cardId = cardId;
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ if (!game.getExile().getExileZone(exileId).contains(cardId)) {
+ return false;
+ }
+ SpellsCastWatcher watcher = (SpellsCastWatcher) game.getState().getWatchers().get(SpellsCastWatcher.class.getSimpleName(), source.getSourceId());
+ if (watcher != null) {
+ List spells = watcher.getSpellsCastThisTurn(source.getControllerId());
+ if (spells != null) {
+ for (Spell spell : spells) {
+ if (spell.getSourceId() == cardId) {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/p/PrepareFight.java b/Mage.Sets/src/mage/cards/p/PrepareFight.java
index d6bc3413405..07fd0a80951 100644
--- a/Mage.Sets/src/mage/cards/p/PrepareFight.java
+++ b/Mage.Sets/src/mage/cards/p/PrepareFight.java
@@ -75,7 +75,7 @@ public class PrepareFight extends SplitCard {
// to
// Fight
// Target creature you control fights target creature you don't control.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addEffect(new FightTargetsEffect());
getRightHalfCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
Target target = new TargetCreaturePermanent(filter);
diff --git a/Mage.Sets/src/mage/cards/p/PrismaticOmen.java b/Mage.Sets/src/mage/cards/p/PrismaticOmen.java
index c89e0f27b3b..a3b9fc199cc 100644
--- a/Mage.Sets/src/mage/cards/p/PrismaticOmen.java
+++ b/Mage.Sets/src/mage/cards/p/PrismaticOmen.java
@@ -27,31 +27,22 @@
*/
package mage.cards.p;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.UUID;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ContinuousEffectImpl;
-import mage.abilities.mana.BasicManaAbility;
-import mage.abilities.mana.BlackManaAbility;
-import mage.abilities.mana.BlueManaAbility;
-import mage.abilities.mana.GreenManaAbility;
-import mage.abilities.mana.RedManaAbility;
-import mage.abilities.mana.WhiteManaAbility;
+import mage.abilities.mana.*;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.Layer;
-import mage.constants.Outcome;
-import mage.constants.SubLayer;
-import mage.constants.Zone;
+import mage.constants.*;
import mage.filter.common.FilterLandPermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -77,11 +68,11 @@ public class PrismaticOmen extends CardImpl {
class BecomesBasicLandTypeAllEffect extends ContinuousEffectImpl {
- protected ArrayList landTypes = new ArrayList<>();
+ protected List landTypes = new ArrayList<>();
public BecomesBasicLandTypeAllEffect(String... landNames) {
super(Duration.WhileOnBattlefield, Outcome.Detriment);
- landTypes.addAll(Arrays.asList(landNames));
+ landTypes.addAll(SubType.getBasicLands(false));
this.staticText = "Lands you control are every basic land type in addition to their other types";
}
@@ -114,24 +105,24 @@ class BecomesBasicLandTypeAllEffect extends ContinuousEffectImpl {
}
}
}
- if (mana.getGreen() == 0 && landTypes.contains("Forest")) {
+ if (mana.getGreen() == 0 && landTypes.contains(SubType.FOREST)) {
land.addAbility(new GreenManaAbility(), source.getSourceId(), game);
}
- if (mana.getRed() == 0 && landTypes.contains("Mountain")) {
+ if (mana.getRed() == 0 && landTypes.contains(SubType.MOUNTAIN)) {
land.addAbility(new RedManaAbility(), source.getSourceId(), game);
}
- if (mana.getBlue() == 0 && landTypes.contains("Island")) {
+ if (mana.getBlue() == 0 && landTypes.contains(SubType.ISLAND)) {
land.addAbility(new BlueManaAbility(), source.getSourceId(), game);
}
- if (mana.getWhite() == 0 && landTypes.contains("Plains")) {
+ if (mana.getWhite() == 0 && landTypes.contains(SubType.PLAINS)) {
land.addAbility(new WhiteManaAbility(), source.getSourceId(), game);
}
- if (mana.getBlack() == 0 && landTypes.contains("Swamp")) {
+ if (mana.getBlack() == 0 && landTypes.contains(SubType.SWAMP)) {
land.addAbility(new BlackManaAbility(), source.getSourceId(), game);
}
break;
case TypeChangingEffects_4:
- for (String subtype : landTypes) {
+ for (SubType subtype : landTypes) {
if (!land.getSubtype(game).contains(subtype)) {
land.getSubtype(game).add(subtype);
}
diff --git a/Mage.Sets/src/mage/cards/r/RagsRiches.java b/Mage.Sets/src/mage/cards/r/RagsRiches.java
index 2e801390330..b59cc838c87 100644
--- a/Mage.Sets/src/mage/cards/r/RagsRiches.java
+++ b/Mage.Sets/src/mage/cards/r/RagsRiches.java
@@ -32,7 +32,7 @@ public class RagsRiches extends SplitCard {
// to
// Riches
// Each opponent chooses a creature he or she controls. You gain control of each of those creatures.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addEffect(new RichesEffect());
}
diff --git a/Mage.Sets/src/mage/cards/r/RallyTheAncestors.java b/Mage.Sets/src/mage/cards/r/RallyTheAncestors.java
index 2c92b01fbde..e7c777104f1 100644
--- a/Mage.Sets/src/mage/cards/r/RallyTheAncestors.java
+++ b/Mage.Sets/src/mage/cards/r/RallyTheAncestors.java
@@ -27,9 +27,6 @@
*/
package mage.cards.r;
-import java.util.ArrayList;
-import java.util.Set;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.common.delayed.AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility;
@@ -51,6 +48,11 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.targetpointer.FixedTargets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author emerald000
@@ -101,7 +103,7 @@ class RallyTheAncestorsEffect extends OneShotEffect {
filter.add(new ConvertedManaCostPredicate(ComparisonType.FEWER_THAN, xValue + 1));
Set cards = player.getGraveyard().getCards(filter, game);
player.moveCards(cards, Zone.BATTLEFIELD, source, game);
- ArrayList toExile = new ArrayList<>(cards.size());
+ List toExile = new ArrayList<>(cards.size());
for (Card card : cards) {
if (card != null) {
Permanent permanent = game.getPermanent(card.getId());
diff --git a/Mage.Sets/src/mage/cards/r/ReapIntellect.java b/Mage.Sets/src/mage/cards/r/ReapIntellect.java
index b6f858ca0cb..e495fc89f75 100644
--- a/Mage.Sets/src/mage/cards/r/ReapIntellect.java
+++ b/Mage.Sets/src/mage/cards/r/ReapIntellect.java
@@ -27,17 +27,10 @@
*/
package mage.cards.r;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
-import mage.cards.Card;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.cards.Cards;
-import mage.cards.CardsImpl;
-import mage.cards.SplitCard;
+import mage.cards.*;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
@@ -52,6 +45,10 @@ import mage.target.common.TargetCardInHand;
import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetOpponent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author jeffwadsworth
@@ -122,7 +119,7 @@ class ReapIntellectEffect extends OneShotEffect {
if (!exiledCards.isEmpty()) {
// Building a card filter with all names
- ArrayList names = new ArrayList<>();
+ List names = new ArrayList<>();
FilterCard filterNamedCards = new FilterCard();
for (Card card : exiledCards.getCards(game)) {
if (exiledCards.size() == 1) {
diff --git a/Mage.Sets/src/mage/cards/r/ReduceRubble.java b/Mage.Sets/src/mage/cards/r/ReduceRubble.java
index 59541ce56c4..f415afa07ea 100644
--- a/Mage.Sets/src/mage/cards/r/ReduceRubble.java
+++ b/Mage.Sets/src/mage/cards/r/ReduceRubble.java
@@ -58,7 +58,7 @@ public class ReduceRubble extends SplitCard {
// Rubble
// Up to three target lands don't untap during their controller's next untap step.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
Effect effect = new DontUntapInControllersNextUntapStepTargetEffect();
effect.setText("Up to three target lands don't untap during their controller's next untap step");
getRightHalfCard().getSpellAbility().addEffect(effect);
diff --git a/Mage.Sets/src/mage/cards/r/ReinsOfTheVinesteed.java b/Mage.Sets/src/mage/cards/r/ReinsOfTheVinesteed.java
index 86c6e555bd8..636e937c4bb 100644
--- a/Mage.Sets/src/mage/cards/r/ReinsOfTheVinesteed.java
+++ b/Mage.Sets/src/mage/cards/r/ReinsOfTheVinesteed.java
@@ -27,8 +27,6 @@
*/
package mage.cards.r;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.DiesAttachedTriggeredAbility;
@@ -51,6 +49,10 @@ import mage.players.Player;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author jeffwadsworth
@@ -110,7 +112,7 @@ class ReinsOfTheVinesteedEffect extends OneShotEffect {
}
FilterCreaturePermanent FILTER = new FilterCreaturePermanent();
StringBuilder sb = new StringBuilder("creature that shares a creature type with the formerly attached creature: ");
- ArrayList> subtypes = new ArrayList<>();
+ List> subtypes = new ArrayList<>();
for (SubType subtype : lastStateCreature.getSubtype(game)) {
subtypes.add(new SubtypePredicate(subtype));
sb.append(subtype).append(", ");
diff --git a/Mage.Sets/src/mage/cards/r/RestoreBalance.java b/Mage.Sets/src/mage/cards/r/RestoreBalance.java
index c9ff1505573..8569f782235 100644
--- a/Mage.Sets/src/mage/cards/r/RestoreBalance.java
+++ b/Mage.Sets/src/mage/cards/r/RestoreBalance.java
@@ -27,17 +27,11 @@
*/
package mage.cards.r;
-import java.util.HashMap;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.costs.mana.ColoredManaCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.SuspendAbility;
-import mage.cards.Card;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
-import mage.cards.Cards;
-import mage.cards.CardsImpl;
+import mage.cards.*;
import mage.constants.CardType;
import mage.constants.ColoredManaSymbol;
import mage.constants.Outcome;
@@ -50,6 +44,10 @@ import mage.players.Player;
import mage.target.common.TargetCardInHand;
import mage.target.common.TargetControlledPermanent;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
/**
*
* @author Plopman
@@ -168,7 +166,7 @@ class RestoreBalanceEffect extends OneShotEffect {
//Cards in hand
int minCard = Integer.MAX_VALUE;
- HashMap cardsToDiscard = new HashMap<>(2);
+ Map cardsToDiscard = new HashMap<>(2);
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
Player player = game.getPlayer(playerId);
if (player != null) {
diff --git a/Mage.Sets/src/mage/cards/r/RiteOfRuin.java b/Mage.Sets/src/mage/cards/r/RiteOfRuin.java
index c9c587c80d5..a2bb5c27ebe 100644
--- a/Mage.Sets/src/mage/cards/r/RiteOfRuin.java
+++ b/Mage.Sets/src/mage/cards/r/RiteOfRuin.java
@@ -27,9 +27,6 @@
*/
package mage.cards.r;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
@@ -44,6 +41,8 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetControlledPermanent;
+import java.util.*;
+
/**
*
* @author North
@@ -91,7 +90,7 @@ class RiteOfRuinEffect extends OneShotEffect {
return false;
}
- HashSet choices = new HashSet<>();
+ Set choices = new HashSet<>();
choices.add("Artifacts");
choices.add("Creatures");
choices.add("Lands");
@@ -106,7 +105,7 @@ class RiteOfRuinEffect extends OneShotEffect {
}
order.add(getCardType(choices.iterator().next()));
- LinkedList sacrifices = new LinkedList<>();
+ List sacrifices = new LinkedList<>();
int count = 1;
for (CardType cardType : order) {
FilterControlledPermanent filter = new FilterControlledPermanent(cardType + " permanent you control");
diff --git a/Mage.Sets/src/mage/cards/s/SavageSummoning.java b/Mage.Sets/src/mage/cards/s/SavageSummoning.java
index 38a715d4387..e4bc8585389 100644
--- a/Mage.Sets/src/mage/cards/s/SavageSummoning.java
+++ b/Mage.Sets/src/mage/cards/s/SavageSummoning.java
@@ -27,12 +27,6 @@
*/
package mage.cards.s;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.CantBeCounteredAbility;
@@ -42,11 +36,7 @@ import mage.abilities.effects.ReplacementEffectImpl;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.AsThoughEffectType;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.Outcome;
-import mage.constants.WatcherScope;
+import mage.constants.*;
import mage.counters.CounterType;
import mage.game.Game;
import mage.game.command.Commander;
@@ -57,6 +47,9 @@ import mage.game.permanent.Permanent;
import mage.game.stack.Spell;
import mage.watchers.Watcher;
+import java.util.*;
+import java.util.Map.Entry;
+
/**
*
* @author LevelX2
@@ -200,7 +193,7 @@ class SavageSummoningWatcher extends Watcher {
public boolean isSpellCastWithThisSavageSummoning(UUID spellId, UUID cardId, int zoneChangeCounter) {
String cardKey = new StringBuilder(cardId.toString()).append('_').append(zoneChangeCounter).toString();
- HashSet savageSpells = (HashSet) spellsCastWithSavageSummoning.get(spellId);
+ Set savageSpells = spellsCastWithSavageSummoning.get(spellId);
return savageSpells != null && savageSpells.contains(cardKey);
}
@@ -208,7 +201,7 @@ class SavageSummoningWatcher extends Watcher {
String creatureCardKey = card.getId().toString() + '_' + (card.getZoneChangeCounter(game));
// add one because card is now gone to battlefield as creature
String cardKey = cardId.toString() + '_' + zoneChangeCounter;
- HashSet savageSpells = (HashSet) cardsCastWithSavageSummoning.get(creatureCardKey);
+ Set savageSpells = cardsCastWithSavageSummoning.get(creatureCardKey);
return savageSpells != null && savageSpells.contains(cardKey);
}
diff --git a/Mage.Sets/src/mage/cards/s/ScytheSpecter.java b/Mage.Sets/src/mage/cards/s/ScytheSpecter.java
index 04a9d91a440..8e776201cc1 100644
--- a/Mage.Sets/src/mage/cards/s/ScytheSpecter.java
+++ b/Mage.Sets/src/mage/cards/s/ScytheSpecter.java
@@ -27,8 +27,6 @@
*/
package mage.cards.s;
-import java.util.HashMap;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
@@ -46,6 +44,10 @@ import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetDiscard;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
/**
*
* @author jeffwadsworth
@@ -90,8 +92,8 @@ class ScytheSpecterEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
- HashMap cardDiscarded = new HashMap<>();
- HashMap discardedCheck = new HashMap<>();
+ Map cardDiscarded = new HashMap<>();
+ Map discardedCheck = new HashMap<>();
Integer highestCMC = 0;
Integer currentCMC = 0;
Player controller = game.getPlayer(source.getControllerId());
diff --git a/Mage.Sets/src/mage/cards/s/SecondSunrise.java b/Mage.Sets/src/mage/cards/s/SecondSunrise.java
index 80302d0aae0..8940e37f197 100644
--- a/Mage.Sets/src/mage/cards/s/SecondSunrise.java
+++ b/Mage.Sets/src/mage/cards/s/SecondSunrise.java
@@ -27,8 +27,6 @@
*/
package mage.cards.s;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
@@ -43,6 +41,10 @@ import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
import mage.watchers.Watcher;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -103,7 +105,7 @@ class SecondSunriseEffect extends OneShotEffect {
}
class SecondSunriseWatcher extends Watcher {
- ArrayList cards = new ArrayList<>();
+ List cards = new ArrayList<>();
public SecondSunriseWatcher() {
super(SecondSunriseWatcher.class.getSimpleName(), WatcherScope.GAME);
diff --git a/Mage.Sets/src/mage/cards/s/Shapeshifter.java b/Mage.Sets/src/mage/cards/s/Shapeshifter.java
index b803ce72bcd..b935c9dae8c 100644
--- a/Mage.Sets/src/mage/cards/s/Shapeshifter.java
+++ b/Mage.Sets/src/mage/cards/s/Shapeshifter.java
@@ -27,8 +27,6 @@
*/
package mage.cards.s;
-import java.util.HashSet;
-import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
@@ -41,18 +39,16 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.choices.Choice;
import mage.choices.ChoiceImpl;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.Layer;
-import mage.constants.Outcome;
-import mage.constants.SubLayer;
-import mage.constants.TargetController;
-import mage.constants.Zone;
+import mage.constants.*;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.util.CardUtil;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author MarcoMarin / HCrescent
@@ -101,21 +97,21 @@ class ShapeshifterEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
- Player Controller = game.getPlayer(source.getControllerId());
+ Player controller = game.getPlayer(source.getControllerId());
MageObject mageObject = game.getPermanentEntering(source.getSourceId());
if (mageObject == null) {
mageObject = game.getPermanent(source.getSourceId());
}
- if (Controller != null) {
+ if (controller != null) {
Choice numberChoice = new ChoiceImpl();
numberChoice.setMessage("Choose a number beween 0 and 7");
- HashSet numbers = new HashSet<>();
+ Set numbers = new HashSet<>();
for (int i = 0; i <= 7; i++) {
numbers.add(Integer.toString(i));
}
numberChoice.setChoices(numbers);
- while (!Controller.choose(Outcome.Neutral, numberChoice, game)) {
- if (!Controller.canRespond()) {
+ while (!controller.choose(Outcome.Neutral, numberChoice, game)) {
+ if (!controller.canRespond()) {
return false;
}
}
diff --git a/Mage.Sets/src/mage/cards/s/SharedAnimosity.java b/Mage.Sets/src/mage/cards/s/SharedAnimosity.java
index 96d0bfb6779..fd6b7dc2e62 100644
--- a/Mage.Sets/src/mage/cards/s/SharedAnimosity.java
+++ b/Mage.Sets/src/mage/cards/s/SharedAnimosity.java
@@ -27,8 +27,6 @@
*/
package mage.cards.s;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.Mode;
@@ -47,6 +45,10 @@ import mage.filter.predicate.permanent.PermanentIdPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author Plopman
@@ -109,7 +111,7 @@ class SharedAnimosityEffect extends ContinuousEffectImpl {
}
}
if(!allCreatureTypes){
- ArrayList> predicateList = new ArrayList<>();
+ List> predicateList = new ArrayList<>();
for(SubType subtype : permanent.getSubtype(game)){
predicateList.add(new SubtypePredicate(subtype));
}
diff --git a/Mage.Sets/src/mage/cards/s/SilenceTheBelievers.java b/Mage.Sets/src/mage/cards/s/SilenceTheBelievers.java
index 9d6a3cf974d..6ec74cc10a9 100644
--- a/Mage.Sets/src/mage/cards/s/SilenceTheBelievers.java
+++ b/Mage.Sets/src/mage/cards/s/SilenceTheBelievers.java
@@ -27,8 +27,6 @@
*/
package mage.cards.s;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.abilityword.StriveAbility;
import mage.abilities.effects.OneShotEffect;
@@ -42,6 +40,10 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
@@ -95,7 +97,7 @@ class SilenceTheBelieversExileEffect extends OneShotEffect {
for (UUID targetId: this.getTargetPointer().getTargets(game, source)) {
Permanent creature = game.getPermanent(targetId);
if (creature != null) {
- ArrayList attachments = new ArrayList<>(creature.getAttachments());
+ List attachments = new ArrayList<>(creature.getAttachments());
for (UUID attachmentId: attachments) {
Permanent attachment = game.getPermanent(attachmentId);
if (attachment != null && attachment.getSubtype(game).contains("Aura")) {
diff --git a/Mage.Sets/src/mage/cards/s/SithEvoker.java b/Mage.Sets/src/mage/cards/s/SithEvoker.java
index 93224d1460e..a1e836de18d 100644
--- a/Mage.Sets/src/mage/cards/s/SithEvoker.java
+++ b/Mage.Sets/src/mage/cards/s/SithEvoker.java
@@ -27,8 +27,6 @@
*/
package mage.cards.s;
-import java.util.HashSet;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -51,6 +49,10 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetControlledCreaturePermanent;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author Styxo
@@ -84,7 +86,7 @@ public class SithEvoker extends CardImpl {
class SithEvokerEffect extends OneShotEffect {
- private static final HashSet choices = new HashSet<>();
+ private static final Set choices = new HashSet<>();
static {
choices.add("Gain life equal to creature's power");
diff --git a/Mage.Sets/src/mage/cards/s/SithRuins.java b/Mage.Sets/src/mage/cards/s/SithRuins.java
index 588d0fc082c..05be1f30abe 100644
--- a/Mage.Sets/src/mage/cards/s/SithRuins.java
+++ b/Mage.Sets/src/mage/cards/s/SithRuins.java
@@ -27,8 +27,6 @@
*/
package mage.cards.s;
-import java.util.ArrayList;
-import java.util.UUID;
import mage.MageObject;
import mage.abilities.ActivatedAbilityImpl;
import mage.abilities.costs.common.SacrificeSourceCost;
@@ -46,6 +44,10 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.filter.predicate.mageobject.SupertypePredicate;
import mage.target.common.TargetCardInLibrary;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author Styxo
@@ -84,7 +86,7 @@ public class SithRuins extends CardImpl {
addCost(new SacrificeSourceCost());
FilterCard filter = new FilterCard("basic Island, Swamp or Mountain");
filter.add(new CardTypePredicate(CardType.LAND));
- ArrayList> subtypePredicates = new ArrayList<>();
+ List> subtypePredicates = new ArrayList<>();
subtypePredicates.add(new SubtypePredicate(SubType.SWAMP));
subtypePredicates.add(new SubtypePredicate(SubType.MOUNTAIN));
subtypePredicates.add(new SubtypePredicate(SubType.ISLAND));
diff --git a/Mage.Sets/src/mage/cards/s/SoulOfRavnica.java b/Mage.Sets/src/mage/cards/s/SoulOfRavnica.java
index e454cf2391a..667cf8469d0 100644
--- a/Mage.Sets/src/mage/cards/s/SoulOfRavnica.java
+++ b/Mage.Sets/src/mage/cards/s/SoulOfRavnica.java
@@ -27,8 +27,6 @@
*/
package mage.cards.s;
-import java.util.HashSet;
-import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability;
@@ -46,6 +44,10 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -100,7 +102,7 @@ class SoulOfRavnicaEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
- HashSet colors = new HashSet<>();
+ Set colors = new HashSet<>();
for (Permanent permanent : game.getBattlefield().getAllActivePermanents(controller.getId())) {
if (permanent.getColor(game).isBlack()) {
colors.add(ObjectColor.BLACK);
diff --git a/Mage.Sets/src/mage/cards/s/SpiritOfResistance.java b/Mage.Sets/src/mage/cards/s/SpiritOfResistance.java
index 74994905286..2432fe360ea 100644
--- a/Mage.Sets/src/mage/cards/s/SpiritOfResistance.java
+++ b/Mage.Sets/src/mage/cards/s/SpiritOfResistance.java
@@ -27,8 +27,6 @@
*/
package mage.cards.s;
-import java.util.HashSet;
-import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
@@ -45,6 +43,10 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
* @author Quercitron
*/
@@ -79,7 +81,7 @@ enum SpiritOfResistanceCondition implements Condition {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
- HashSet colors = new HashSet<>();
+ Set colors = new HashSet<>();
for (Permanent permanent : game.getBattlefield().getAllActivePermanents(controller.getId())) {
if (permanent.getColor(game).isBlack()) {
colors.add(ObjectColor.BLACK);
diff --git a/Mage.Sets/src/mage/cards/s/SpiritOfTheLabyrinth.java b/Mage.Sets/src/mage/cards/s/SpiritOfTheLabyrinth.java
index 8f00bfe51f7..09298315216 100644
--- a/Mage.Sets/src/mage/cards/s/SpiritOfTheLabyrinth.java
+++ b/Mage.Sets/src/mage/cards/s/SpiritOfTheLabyrinth.java
@@ -27,8 +27,6 @@
*/
package mage.cards.s;
-import java.util.HashSet;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
@@ -40,6 +38,10 @@ import mage.game.Game;
import mage.game.events.GameEvent;
import mage.watchers.Watcher;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
@@ -71,7 +73,7 @@ public class SpiritOfTheLabyrinth extends CardImpl {
class SpiritOfTheLabyrinthWatcher extends Watcher {
- private final HashSet playersThatDrewCard;
+ private final Set playersThatDrewCard;
public SpiritOfTheLabyrinthWatcher() {
super(SpiritOfTheLabyrinthWatcher.class.getSimpleName(), WatcherScope.GAME);
diff --git a/Mage.Sets/src/mage/cards/s/SpringMind.java b/Mage.Sets/src/mage/cards/s/SpringMind.java
index 7b14bbb9bb0..52512b3167e 100644
--- a/Mage.Sets/src/mage/cards/s/SpringMind.java
+++ b/Mage.Sets/src/mage/cards/s/SpringMind.java
@@ -27,6 +27,7 @@
*/
package mage.cards.s;
+import java.util.UUID;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.abilities.keyword.AftermathAbility;
@@ -38,8 +39,6 @@ import mage.constants.SpellAbilityType;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInLibrary;
-import java.util.UUID;
-
/**
*
* @author fireshoes
@@ -56,7 +55,7 @@ public class SpringMind extends SplitCard {
// Mind
// Aftermath
// Draw two cards.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2));
}
diff --git a/Mage.Sets/src/mage/cards/s/StartFinish.java b/Mage.Sets/src/mage/cards/s/StartFinish.java
index 1f467425ca3..90f937e52c5 100644
--- a/Mage.Sets/src/mage/cards/s/StartFinish.java
+++ b/Mage.Sets/src/mage/cards/s/StartFinish.java
@@ -62,7 +62,7 @@ public class StartFinish extends SplitCard {
// Finish
// Aftermath
// As an additional cost to cast Finish, sacrifice a creature. Destroy target creature.
- ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility());
+ ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true));
getRightHalfCard().getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature"))));
getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature (to destoy)")));
getRightHalfCard().getSpellAbility().addEffect(new DestroyTargetEffect("Destroy target creature"));
diff --git a/Mage.Sets/src/mage/cards/s/StorageMatrix.java b/Mage.Sets/src/mage/cards/s/StorageMatrix.java
index 74575b5b110..45c40eb7eee 100644
--- a/Mage.Sets/src/mage/cards/s/StorageMatrix.java
+++ b/Mage.Sets/src/mage/cards/s/StorageMatrix.java
@@ -27,8 +27,6 @@
*/
package mage.cards.s;
-import java.util.HashSet;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.RestrictionEffect;
@@ -44,6 +42,10 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -71,7 +73,7 @@ class StorageMatrixRestrictionEffect extends RestrictionEffect {
private int turn;
private boolean applies;
- private static final HashSet choice = new HashSet<>();
+ private static final Set choice = new HashSet<>();
static {
choice.add(CardType.ARTIFACT.toString());
diff --git a/Mage.Sets/src/mage/cards/s/SunderingTitan.java b/Mage.Sets/src/mage/cards/s/SunderingTitan.java
index f67ef096204..ac9dc94ff5a 100644
--- a/Mage.Sets/src/mage/cards/s/SunderingTitan.java
+++ b/Mage.Sets/src/mage/cards/s/SunderingTitan.java
@@ -27,9 +27,6 @@
*/
package mage.cards.s;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldOrLeavesSourceTriggeredAbility;
@@ -47,6 +44,10 @@ import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetLandPermanent;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -96,9 +97,9 @@ class SunderingTitanDestroyLandEffect extends OneShotEffect {
Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId());
Set lands = new HashSet<>();
if (controller != null && sourcePermanent != null) {
- for (String landName : SubType.getBasicLands(false)) {
+ for (SubType landName : SubType.getBasicLands(false)) {
FilterLandPermanent filter = new FilterLandPermanent(landName + " to destroy");
- filter.add(new SubtypePredicate(SubType.byDescription(landName)));
+ filter.add(new SubtypePredicate(landName));
Target target = new TargetLandPermanent(1, 1, filter, true);
if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) {
controller.chooseTarget(outcome, target, source, game);
diff --git a/Mage.Sets/src/mage/cards/t/TamiyoFieldResearcher.java b/Mage.Sets/src/mage/cards/t/TamiyoFieldResearcher.java
index 5ed5279fd90..aa64e272467 100644
--- a/Mage.Sets/src/mage/cards/t/TamiyoFieldResearcher.java
+++ b/Mage.Sets/src/mage/cards/t/TamiyoFieldResearcher.java
@@ -27,9 +27,6 @@
*/
package mage.cards.t;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
import mage.MageObjectReference;
import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility;
@@ -58,6 +55,10 @@ import mage.players.Player;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -123,7 +124,7 @@ class TamiyoFieldResearcherEffect1 extends OneShotEffect {
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
- ArrayList creatures = new ArrayList<>();
+ List creatures = new ArrayList<>();
for (UUID uuid : getTargetPointer().getTargets(game, source)) {
creatures.add(new MageObjectReference(uuid, game));
}
diff --git a/Mage.Sets/src/mage/cards/t/Tarmogoyf.java b/Mage.Sets/src/mage/cards/t/Tarmogoyf.java
index ee2be7559f8..ed9392855ce 100644
--- a/Mage.Sets/src/mage/cards/t/Tarmogoyf.java
+++ b/Mage.Sets/src/mage/cards/t/Tarmogoyf.java
@@ -27,8 +27,6 @@
*/
package mage.cards.t;
-import java.util.HashSet;
-import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
@@ -37,15 +35,14 @@ import mage.abilities.effects.ContinuousEffectImpl;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.Layer;
-import mage.constants.Outcome;
-import mage.constants.SubLayer;
-import mage.constants.Zone;
+import mage.constants.*;
import mage.game.Game;
import mage.players.Player;
+import java.util.EnumSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author Plopman
@@ -95,7 +92,7 @@ class TarmogoyfEffect extends ContinuousEffectImpl {
if (controller != null) {
MageObject target = game.getObject(source.getSourceId());
if (target != null) {
- HashSet foundCardTypes = new HashSet<>();
+ Set foundCardTypes = EnumSet.noneOf(CardType.class);
for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) {
Player player = game.getPlayer(playerId);
if (player != null) {
diff --git a/Mage.Sets/src/mage/cards/t/TeferisRealm.java b/Mage.Sets/src/mage/cards/t/TeferisRealm.java
index 1e5dcf732b9..d74b69fcb16 100644
--- a/Mage.Sets/src/mage/cards/t/TeferisRealm.java
+++ b/Mage.Sets/src/mage/cards/t/TeferisRealm.java
@@ -27,8 +27,6 @@
*/
package mage.cards.t;
-import java.util.HashSet;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
@@ -46,6 +44,10 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
/**
*
* @author LevelX2
@@ -76,7 +78,7 @@ class TeferisRealmEffect extends OneShotEffect {
private static final String CREATURE = "Creature";
private static final String LAND = "Land";
private static final String NON_AURA_ENCHANTMENT = "Non-Aura enchantment";
- private static final HashSet choices = new HashSet<>();
+ private static final Set choices = new HashSet<>();
static {
choices.add(ARTIFACT);
diff --git a/Mage.Sets/src/mage/cards/t/Terastodon.java b/Mage.Sets/src/mage/cards/t/Terastodon.java
index c5abdf6bcd2..5dc9734eedb 100644
--- a/Mage.Sets/src/mage/cards/t/Terastodon.java
+++ b/Mage.Sets/src/mage/cards/t/Terastodon.java
@@ -27,9 +27,6 @@
*/
package mage.cards.t;
-import java.util.HashMap;
-import java.util.Map.Entry;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -47,6 +44,11 @@ import mage.game.permanent.Permanent;
import mage.game.permanent.token.ElephantToken;
import mage.target.TargetPermanent;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.UUID;
+
/**
*
* @author jeffwadsworth
@@ -100,7 +102,7 @@ class TerastodonEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
- HashMap