diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java
index b65dfe74f35..a1887eb26a7 100644
--- a/Mage.Client/src/main/java/mage/client/MageFrame.java
+++ b/Mage.Client/src/main/java/mage/client/MageFrame.java
@@ -881,7 +881,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
popupDebug.add(menuDebugTestCardRenderModesDialog);
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
- setMinimumSize(new java.awt.Dimension(1024, 768));
+ setMinimumSize(new java.awt.Dimension(1024, 500));
desktopPane.setBackground(new java.awt.Color(204, 204, 204));
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 8d231eb2651..2c6ef40ba58 100644
--- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java
+++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java
@@ -73,8 +73,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
}
trimGrid();
layoutGrid();
- cardScroll.revalidate();
- cardScroll.repaint();
+ repaintGrid();
}
}
@@ -315,8 +314,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
// Remove empty rows / cols / spaces in stacks
trimGrid();
layoutGrid();
- cardScroll.revalidate();
- cardScroll.repaint();
+ repaintGrid();
} else {
// Add new cards to grid
for (CardView card : cards) {
@@ -325,14 +323,14 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
eventSource.fireEvent(card, ClientEventType.ADD_SPECIFIC_CARD);
}
layoutGrid();
- cardContent.repaint();
+ repaintGrid();
}
}
public void changeGUISize() {
layoutGrid();
cardScroll.getVerticalScrollBar().setUnitIncrement(CardRenderer.getCardTopHeight(getCardWidth()));
- cardContent.repaint();
+ repaintGrid();
}
public void cleanUp() {
@@ -386,7 +384,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
}
trimGrid();
layoutGrid();
- cardContent.repaint();
+ repaintGrid();
}
public DeckCardLayout getCardLayout() {
@@ -710,6 +708,47 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
// Editting mode
this.mode = Constants.DeckEditorMode.LIMITED_BUILDING;
+ // Content
+ cardContent = new JLayeredPane();
+ cardContent.setLayout(null);
+ cardContent.setOpaque(false);
+ cardContent.addMouseListener(new MouseAdapter() {
+ private boolean isDragging = false;
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if (SwingUtilities.isLeftMouseButton(e)) {
+ isDragging = true;
+ beginSelectionDrag(e.getX(), e.getY(), e.isShiftDown());
+ updateSelectionDrag(e.getX(), e.getY());
+ }
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ if (isDragging) {
+ isDragging = false;
+ updateSelectionDrag(e.getX(), e.getY());
+ endSelectionDrag(e.getX(), e.getY());
+ }
+ }
+ });
+ cardContent.addMouseMotionListener(new MouseAdapter() {
+ @Override
+ public void mouseDragged(MouseEvent e) {
+ updateSelectionDrag(e.getX(), e.getY());
+ }
+ });
+ cardScroll = new JScrollPane(cardContent,
+ ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
+ ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ cardScroll.setOpaque(false);
+ cardScroll.getViewport().setOpaque(false);
+ cardScroll.setViewportBorder(BorderFactory.createEmptyBorder());
+ cardScroll.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
+ cardScroll.getVerticalScrollBar().setUnitIncrement(CardRenderer.getCardTopHeight(getCardWidth()));
+ this.add(cardScroll, BorderLayout.CENTER);
+
// Toolbar
sortButton = new JButton("Sort");
filterButton = new JButton("Filter");
@@ -757,56 +796,15 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
cardSizeMod = (float) Math.pow(2, sliderFrac);
// Update grid
layoutGrid();
- cardContent.repaint();
+ repaintGrid();
}
});
- cardSizeSliderLabel = new JLabel("Card Size:");
+ cardSizeSliderLabel = new JLabel("Card size:");
sliderPanel.add(cardSizeSliderLabel);
sliderPanel.add(cardSizeSlider);
toolbar.add(sliderPanel, BorderLayout.EAST);
this.add(toolbar, BorderLayout.NORTH);
- // Content
- cardContent = new JLayeredPane();
- cardContent.setLayout(null);
- cardContent.setOpaque(false);
- cardContent.addMouseListener(new MouseAdapter() {
- private boolean isDragging = false;
-
- @Override
- public void mousePressed(MouseEvent e) {
- if (SwingUtilities.isLeftMouseButton(e)) {
- isDragging = true;
- beginSelectionDrag(e.getX(), e.getY(), e.isShiftDown());
- updateSelectionDrag(e.getX(), e.getY());
- }
- }
-
- @Override
- public void mouseReleased(MouseEvent e) {
- if (isDragging) {
- isDragging = false;
- updateSelectionDrag(e.getX(), e.getY());
- endSelectionDrag(e.getX(), e.getY());
- }
- }
- });
- cardContent.addMouseMotionListener(new MouseAdapter() {
- @Override
- public void mouseDragged(MouseEvent e) {
- updateSelectionDrag(e.getX(), e.getY());
- }
- });
- cardScroll = new JScrollPane(cardContent,
- ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
- ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
- cardScroll.setOpaque(false);
- cardScroll.getViewport().setOpaque(false);
- cardScroll.setViewportBorder(BorderFactory.createEmptyBorder());
- cardScroll.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
- cardScroll.getVerticalScrollBar().setUnitIncrement(CardRenderer.getCardTopHeight(getCardWidth()));
- this.add(cardScroll, BorderLayout.CENTER);
-
// Insert arrow
insertArrow = new JLabel();
insertArrow.setSize(20, 20);
@@ -1230,7 +1228,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
// And finally rerender
layoutGrid();
- repaint();
+ repaintGrid();
}
public void reselectBy() {
@@ -1340,7 +1338,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
// And finally rerender
layoutGrid();
- repaint();
+ repaintGrid();
}
private static final Pattern pattern = Pattern.compile(".*Add(.*)(\\{[WUBRGXC]\\})");
@@ -1568,8 +1566,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
}
layoutGrid();
- cardScroll.revalidate();
- repaint();
+ repaintGrid();
JOptionPane.showMessageDialog(null, "Added " + pimpedCards.size() + " cards. You can select them and the originals by choosing 'Multiples'");
}
}
@@ -1609,8 +1606,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
}
cardGrid = newCardGrid;
layoutGrid();
- cardScroll.revalidate();
- repaint();
+ repaintGrid();
}
// Update the contents of the card grid
@@ -1734,10 +1730,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
if (didModify) {
// Update layout
layoutGrid();
-
- // Update draw
- cardScroll.revalidate();
- repaint();
+ repaintGrid();
}
}
@@ -1877,9 +1870,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
eventSource.fireEvent(card, ClientEventType.ADD_SPECIFIC_CARD);
// Update layout
layoutGrid();
- // Update draw
- cardScroll.revalidate();
- repaint();
+ repaintGrid();
}
}
@@ -2083,6 +2074,12 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
return (int) (1.4 * getCardWidth());
}
+ private void repaintGrid() {
+ cardScroll.revalidate();
+ cardScroll.repaint();
+ repaint();
+ }
+
/**
* Position all of the card views correctly
*/
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.form b/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.form
index 8db77a1b8a3..be4960f0eb0 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.form
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.form
@@ -11,39 +11,45 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
-
+
+
+
+
+
+
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java
index d087803205f..40a635038e4 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java
@@ -1,9 +1,3 @@
-
- /*
- * DeckArea.java
- *
- * Created on Feb 18, 2010, 3:10:39 PM
- */
package mage.client.deckeditor;
import mage.cards.Card;
@@ -26,7 +20,6 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
- *
* @author BetaSteward_at_googlemail.com
*/
public class DeckArea extends javax.swing.JPanel {
@@ -38,7 +31,6 @@ public class DeckArea extends javax.swing.JPanel {
private BigCard lastBigCard = null;
private int dividerLocationNormal = 0;
private int dividerLocationLimited = 0;
- private static final boolean isLimitedBuildingOrientation = false;
public DeckCardLayout getCardLayout() {
return deckList.getCardLayout();
@@ -156,7 +148,7 @@ public class DeckArea extends javax.swing.JPanel {
for (CardView card : cards) {
CardView newCard = new CardView(card);
sideboardList.addCardView(newCard, true);
- }
+ }
}
@Override
@@ -170,7 +162,7 @@ public class DeckArea extends javax.swing.JPanel {
});
}
- public Settings saveSettings() {
+ public Settings saveSettings(boolean isLimitedBuildingOrientation) {
Settings settings = new Settings();
settings.maindeckSettings = deckList.saveSettings();
settings.sideboardSetings = sideboardList.saveSettings();
@@ -184,7 +176,7 @@ public class DeckArea extends javax.swing.JPanel {
return settings;
}
- public void loadSettings(Settings s) {
+ public void loadSettings(Settings s, boolean isLimitedBuildingOrientation) {
if (s != null) {
deckList.loadSettings(s.maindeckSettings);
sideboardList.loadSettings(s.sideboardSetings);
@@ -215,8 +207,8 @@ public class DeckArea extends javax.swing.JPanel {
private void setGUISize() {
}
- public void setOrientation(boolean limitedBuildingOrientation) {
- if (limitedBuildingOrientation) {
+ public void setOrientation(boolean isLimitedBuildingOrientation) {
+ if (isLimitedBuildingOrientation) {
deckAreaSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
if (dividerLocationLimited != 0) {
deckAreaSplitPane.setDividerLocation(dividerLocationLimited);
@@ -298,21 +290,19 @@ public class DeckArea extends javax.swing.JPanel {
deckList = new mage.client.cards.DragCardGrid();
sideboardList = new mage.client.cards.DragCardGrid();
+ setLayout(new java.awt.BorderLayout());
+
deckAreaSplitPane.setBorder(null);
- deckAreaSplitPane.setResizeWeight(0.6);
+ deckAreaSplitPane.setDividerSize(10);
+ deckAreaSplitPane.setResizeWeight(0.5);
+
+ deckList.setMinimumSize(new java.awt.Dimension(200, 56));
deckAreaSplitPane.setLeftComponent(deckList);
+
+ sideboardList.setMinimumSize(new java.awt.Dimension(200, 56));
deckAreaSplitPane.setRightComponent(sideboardList);
- javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
- this.setLayout(layout);
- layout.setHorizontalGroup(
- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(deckAreaSplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 918, Short.MAX_VALUE)
- );
- layout.setVerticalGroup(
- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(deckAreaSplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE)
- );
+ add(deckAreaSplitPane, java.awt.BorderLayout.CENTER);
}// //GEN-END:initComponents
public DragCardGrid getDeckList() {
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPane.form b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPane.form
index 7428599da10..a743112f198 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPane.form
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPane.form
@@ -20,6 +20,11 @@
+
+
+
+
+
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPane.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPane.java
index f3b65eb1549..48a360f973c 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPane.java
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPane.java
@@ -74,6 +74,7 @@ public class DeckEditorPane extends MagePane {
deckEditorPanel1 = new mage.client.deckeditor.DeckEditorPanel();
filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 10), new java.awt.Dimension(0, 32767));
+ deckEditorPanel1.setMinimumSize(new java.awt.Dimension(1000, 500));
getContentPane().add(deckEditorPanel1, java.awt.BorderLayout.CENTER);
getContentPane().add(filler1, java.awt.BorderLayout.NORTH);
}// //GEN-END:initComponents
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.form b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.form
index 1282c8ff131..7b7b22f0f77 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.form
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.form
@@ -33,6 +33,7 @@
+
@@ -47,6 +48,11 @@
+
+
+
+
+
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java
index 3b9c00a9164..b5b7cef9f06 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java
@@ -78,7 +78,6 @@ public class DeckEditorPanel extends javax.swing.JPanel {
deckArea.setOpaque(false);
panelLeft.setOpaque(false);
panelRight.setOpaque(false);
- restoreDividerLocationsAndDeckAreaSettings();
countdown = new javax.swing.Timer(1000,
e -> {
if (--timeout > 0) {
@@ -93,11 +92,16 @@ public class DeckEditorPanel extends javax.swing.JPanel {
}
});
- // Set up tracking to save the deck editor settings when the deck editor is hidden.
+ // save editor settings dynamicly on hides (e.g. app close)
addHierarchyListener((HierarchyEvent e) -> {
if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0) {
if (!isShowing()) {
- saveDividerLocationsAndDeckAreaSettings();
+ // It's bugged and called on sideboarding creates too (before load). So:
+ // * for free mode - save here
+ // * for draft/sideboarding - save on cleanup call
+ if (mode == DeckEditorMode.FREE_BUILDING) {
+ saveDividerLocationsAndDeckAreaSettings();
+ }
}
}
});
@@ -127,21 +131,32 @@ public class DeckEditorPanel extends javax.swing.JPanel {
}
private void saveDividerLocationsAndDeckAreaSettings() {
- PreferencesDialog.saveValue(PreferencesDialog.KEY_EDITOR_HORIZONTAL_DIVIDER_LOCATION, Integer.toString(panelRight.getDividerLocation()));
- PreferencesDialog.saveValue(PreferencesDialog.KEY_EDITOR_DECKAREA_SETTINGS, this.deckArea.saveSettings().toString());
+ boolean isLimitedBuildingOrientation = (mode != DeckEditorMode.FREE_BUILDING);
+ if (isLimitedBuildingOrientation) {
+ PreferencesDialog.saveValue(PreferencesDialog.KEY_EDITOR_HORIZONTAL_DIVIDER_LOCATION_LIMITED, Integer.toString(panelRight.getDividerLocation()));
+ } else {
+ PreferencesDialog.saveValue(PreferencesDialog.KEY_EDITOR_HORIZONTAL_DIVIDER_LOCATION_NORMAL, Integer.toString(panelRight.getDividerLocation()));
+ }
+
+ PreferencesDialog.saveValue(PreferencesDialog.KEY_EDITOR_DECKAREA_SETTINGS, this.deckArea.saveSettings(isLimitedBuildingOrientation).toString());
}
private void restoreDividerLocationsAndDeckAreaSettings() {
- // Load horizontal split position setting
- String dividerLocation = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_EDITOR_HORIZONTAL_DIVIDER_LOCATION, "");
+ String dividerLocation = "";
+ boolean isLimitedBuildingOrientation = (mode != DeckEditorMode.FREE_BUILDING);
+ if (isLimitedBuildingOrientation) {
+ dividerLocation = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_EDITOR_HORIZONTAL_DIVIDER_LOCATION_LIMITED, "");
+ } else {
+ dividerLocation = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_EDITOR_HORIZONTAL_DIVIDER_LOCATION_NORMAL, "");
+ }
if (!dividerLocation.isEmpty()) {
panelRight.setDividerLocation(Integer.parseInt(dividerLocation));
}
// Load deck area settings
this.deckArea.loadSettings(
- DeckArea.Settings.parse(
- PreferencesDialog.getCachedValue(PreferencesDialog.KEY_EDITOR_DECKAREA_SETTINGS, "")));
+ DeckArea.Settings.parse(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_EDITOR_DECKAREA_SETTINGS, "")),
+ isLimitedBuildingOrientation);
}
public void changeGUISize() {
@@ -157,11 +172,12 @@ public class DeckEditorPanel extends javax.swing.JPanel {
this.mode = mode;
this.btnAddLand.setVisible(false);
+ restoreDividerLocationsAndDeckAreaSettings();
switch (mode) {
case LIMITED_BUILDING:
this.btnAddLand.setVisible(true);
this.txtTimeRemaining.setVisible(true);
- // Fall through to sideboarding
+ // Fall through to sideboarding (no break)
case SIDEBOARDING:
this.btnSubmit.setVisible(true);
this.btnSubmitTimer.setVisible(true);
@@ -864,9 +880,12 @@ public class DeckEditorPanel extends javax.swing.JPanel {
txtTimeRemaining = new javax.swing.JTextField();
deckLegalityDisplay = new mage.client.deckeditor.DeckLegalityPanel();
+ panelRight.setDividerSize(10);
panelRight.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
panelRight.setResizeWeight(0.5);
panelRight.setTopComponent(cardSelector);
+
+ deckArea.setMinimumSize(new java.awt.Dimension(200, 56));
panelRight.setBottomComponent(deckArea);
panelDeck.setOpaque(false);
@@ -881,21 +900,21 @@ public class DeckEditorPanel extends javax.swing.JPanel {
javax.swing.GroupLayout panelDeckNameLayout = new javax.swing.GroupLayout(panelDeckName);
panelDeckName.setLayout(panelDeckNameLayout);
panelDeckNameLayout.setHorizontalGroup(
- panelDeckNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckNameLayout.createSequentialGroup()
- .addContainerGap()
- .addComponent(lblDeckName)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(txtDeckName, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE)
- .addContainerGap())
+ panelDeckNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckNameLayout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(lblDeckName)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(txtDeckName, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE)
+ .addContainerGap())
);
panelDeckNameLayout.setVerticalGroup(
- panelDeckNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckNameLayout.createSequentialGroup()
- .addGroup(panelDeckNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(txtDeckName, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(lblDeckName))
- .addGap(0, 0, 0))
+ panelDeckNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckNameLayout.createSequentialGroup()
+ .addGroup(panelDeckNameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(txtDeckName, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(lblDeckName))
+ .addGap(0, 0, 0))
);
panelDeck.add(panelDeckName);
@@ -924,21 +943,21 @@ public class DeckEditorPanel extends javax.swing.JPanel {
javax.swing.GroupLayout panelDeckCreateLayout = new javax.swing.GroupLayout(panelDeckCreate);
panelDeckCreate.setLayout(panelDeckCreateLayout);
panelDeckCreateLayout.setHorizontalGroup(
- panelDeckCreateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckCreateLayout.createSequentialGroup()
- .addContainerGap()
- .addComponent(btnNew, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(btnGenDeck, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(49, Short.MAX_VALUE))
+ panelDeckCreateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckCreateLayout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(btnNew, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(btnGenDeck, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(49, Short.MAX_VALUE))
);
panelDeckCreateLayout.setVerticalGroup(
- panelDeckCreateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckCreateLayout.createSequentialGroup()
- .addGap(5, 5, 5)
- .addGroup(panelDeckCreateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(btnGenDeck, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)
- .addComponent(btnNew, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)))
+ panelDeckCreateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckCreateLayout.createSequentialGroup()
+ .addGap(5, 5, 5)
+ .addGroup(panelDeckCreateLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(btnGenDeck, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)
+ .addComponent(btnNew, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)))
);
panelDeck.add(panelDeckCreate);
@@ -967,21 +986,21 @@ public class DeckEditorPanel extends javax.swing.JPanel {
javax.swing.GroupLayout panelDeckLoadLayout = new javax.swing.GroupLayout(panelDeckLoad);
panelDeckLoad.setLayout(panelDeckLoadLayout);
panelDeckLoadLayout.setHorizontalGroup(
- panelDeckLoadLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckLoadLayout.createSequentialGroup()
- .addContainerGap()
- .addComponent(btnLoad, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(btnImport, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(49, Short.MAX_VALUE))
+ panelDeckLoadLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckLoadLayout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(btnLoad, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(btnImport, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(49, Short.MAX_VALUE))
);
panelDeckLoadLayout.setVerticalGroup(
- panelDeckLoadLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckLoadLayout.createSequentialGroup()
- .addContainerGap()
- .addGroup(panelDeckLoadLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(btnLoad, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
- .addComponent(btnImport, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)))
+ panelDeckLoadLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckLoadLayout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(panelDeckLoadLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(btnLoad, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
+ .addComponent(btnImport, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)))
);
panelDeck.add(panelDeckLoad);
@@ -1010,21 +1029,21 @@ public class DeckEditorPanel extends javax.swing.JPanel {
javax.swing.GroupLayout panelDeckSaveLayout = new javax.swing.GroupLayout(panelDeckSave);
panelDeckSave.setLayout(panelDeckSaveLayout);
panelDeckSaveLayout.setHorizontalGroup(
- panelDeckSaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckSaveLayout.createSequentialGroup()
- .addContainerGap()
- .addComponent(btnSave, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(btnExport, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(49, Short.MAX_VALUE))
+ panelDeckSaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckSaveLayout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(btnSave, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(btnExport, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(49, Short.MAX_VALUE))
);
panelDeckSaveLayout.setVerticalGroup(
- panelDeckSaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckSaveLayout.createSequentialGroup()
- .addContainerGap()
- .addGroup(panelDeckSaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(btnSave, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)
- .addComponent(btnExport, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)))
+ panelDeckSaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckSaveLayout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(panelDeckSaveLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(btnSave, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)
+ .addComponent(btnExport, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)))
);
panelDeck.add(panelDeckSave);
@@ -1055,24 +1074,24 @@ public class DeckEditorPanel extends javax.swing.JPanel {
javax.swing.GroupLayout panelDeckDraftLayout = new javax.swing.GroupLayout(panelDeckDraft);
panelDeckDraft.setLayout(panelDeckDraftLayout);
panelDeckDraftLayout.setHorizontalGroup(
- panelDeckDraftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckDraftLayout.createSequentialGroup()
- .addContainerGap()
- .addComponent(btnSubmit, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(btnSubmitTimer, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(49, Short.MAX_VALUE))
+ panelDeckDraftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckDraftLayout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(btnSubmit, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(btnSubmitTimer, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(49, Short.MAX_VALUE))
);
panelDeckDraftLayout.setVerticalGroup(
- panelDeckDraftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckDraftLayout.createSequentialGroup()
- .addContainerGap()
- .addGroup(panelDeckDraftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckDraftLayout.createSequentialGroup()
- .addComponent(btnSubmit, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addGap(0, 0, Short.MAX_VALUE))
- .addComponent(btnSubmitTimer, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
- .addGap(0, 0, 0))
+ panelDeckDraftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckDraftLayout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(panelDeckDraftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckDraftLayout.createSequentialGroup()
+ .addComponent(btnSubmit, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGap(0, 0, Short.MAX_VALUE))
+ .addComponent(btnSubmitTimer, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
+ .addGap(0, 0, 0))
);
panelDeck.add(panelDeckDraft);
@@ -1101,22 +1120,22 @@ public class DeckEditorPanel extends javax.swing.JPanel {
javax.swing.GroupLayout panelDeckLandsLayout = new javax.swing.GroupLayout(panelDeckLands);
panelDeckLands.setLayout(panelDeckLandsLayout);
panelDeckLandsLayout.setHorizontalGroup(
- panelDeckLandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckLandsLayout.createSequentialGroup()
- .addContainerGap()
- .addComponent(btnAddLand, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(btnLegality, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(49, Short.MAX_VALUE))
+ panelDeckLandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckLandsLayout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(btnAddLand, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(btnLegality, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(49, Short.MAX_VALUE))
);
panelDeckLandsLayout.setVerticalGroup(
- panelDeckLandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelDeckLandsLayout.createSequentialGroup()
- .addContainerGap()
- .addGroup(panelDeckLandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(btnAddLand, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(btnLegality, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addGap(0, 0, 0))
+ panelDeckLandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelDeckLandsLayout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(panelDeckLandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(btnAddLand, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(btnLegality, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addGap(0, 0, 0))
);
panelDeck.add(panelDeckLands);
@@ -1140,21 +1159,21 @@ public class DeckEditorPanel extends javax.swing.JPanel {
javax.swing.GroupLayout panelDeckExitLayout = new javax.swing.GroupLayout(panelDeckExit);
panelDeckExit.setLayout(panelDeckExitLayout);
panelDeckExitLayout.setHorizontalGroup(
- panelDeckExitLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelDeckExitLayout.createSequentialGroup()
- .addContainerGap()
- .addComponent(btnExit, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(txtTimeRemaining, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(49, Short.MAX_VALUE))
+ panelDeckExitLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelDeckExitLayout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(btnExit, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(txtTimeRemaining, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(49, Short.MAX_VALUE))
);
panelDeckExitLayout.setVerticalGroup(
- panelDeckExitLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelDeckExitLayout.createSequentialGroup()
- .addGap(0, 11, Short.MAX_VALUE)
- .addGroup(panelDeckExitLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(btnExit, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(txtTimeRemaining, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)))
+ panelDeckExitLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelDeckExitLayout.createSequentialGroup()
+ .addGap(0, 11, Short.MAX_VALUE)
+ .addGroup(panelDeckExitLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(btnExit, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(txtTimeRemaining, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)))
);
panelDeck.add(panelDeckExit);
@@ -1167,38 +1186,38 @@ public class DeckEditorPanel extends javax.swing.JPanel {
javax.swing.GroupLayout panelLeftLayout = new javax.swing.GroupLayout(panelLeft);
panelLeft.setLayout(panelLeftLayout);
panelLeftLayout.setHorizontalGroup(
- panelLeftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(panelDeck, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(bigCard, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelLeftLayout.createSequentialGroup()
- .addGap(0, 0, Short.MAX_VALUE)
- .addComponent(deckLegalityDisplay, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addGap(0, 0, Short.MAX_VALUE))
+ panelLeftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(panelDeck, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(bigCard, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelLeftLayout.createSequentialGroup()
+ .addGap(0, 0, Short.MAX_VALUE)
+ .addComponent(deckLegalityDisplay, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGap(0, 0, Short.MAX_VALUE))
);
panelLeftLayout.setVerticalGroup(
- panelLeftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(panelLeftLayout.createSequentialGroup()
- .addComponent(panelDeck, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addGap(62, 62, 62)
- .addComponent(deckLegalityDisplay, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addGap(63, 63, 63)
- .addComponent(bigCard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addContainerGap())
+ panelLeftLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(panelLeftLayout.createSequentialGroup()
+ .addComponent(panelDeck, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGap(62, 62, 62)
+ .addComponent(deckLegalityDisplay, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGap(63, 63, 63)
+ .addComponent(bigCard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap())
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addComponent(panelLeft, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(panelRight, javax.swing.GroupLayout.PREFERRED_SIZE, 890, Short.MAX_VALUE))
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(panelLeft, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(panelRight, javax.swing.GroupLayout.DEFAULT_SIZE, 890, Short.MAX_VALUE))
);
layout.setVerticalGroup(
- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(panelLeft, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(panelRight, javax.swing.GroupLayout.Alignment.TRAILING)
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(panelLeft, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(panelRight, javax.swing.GroupLayout.Alignment.TRAILING)
);
}// //GEN-END:initComponents
diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java
index d6a7d1a69d0..74db3ef1d65 100644
--- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java
+++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java
@@ -3,6 +3,7 @@ package mage.client.dialog;
import mage.client.MageFrame;
import mage.client.SessionHandler;
import mage.client.components.KeyBindButton;
+import mage.client.themes.ThemeType;
import mage.client.util.CardLanguage;
import mage.client.util.ClientDefaultSettings;
import mage.client.util.GUISizeHelper;
@@ -15,7 +16,6 @@ import mage.remote.Connection;
import mage.remote.Connection.ProxyType;
import mage.view.UserRequestMessage;
import org.apache.log4j.Logger;
-import mage.client.themes.ThemeType;
import javax.swing.*;
import javax.swing.border.Border;
@@ -160,7 +160,8 @@ public class PreferencesDialog extends javax.swing.JDialog {
public static final String KEY_TABLES_DIVIDER_LOCATION_4 = "tablePanelDividerLocation4";
// Positions of deck editor divider bars
- public static final String KEY_EDITOR_HORIZONTAL_DIVIDER_LOCATION = "editorHorizontalDividerLocation";
+ public static final String KEY_EDITOR_HORIZONTAL_DIVIDER_LOCATION_NORMAL = "editorHorizontalDividerLocationNormal";
+ public static final String KEY_EDITOR_HORIZONTAL_DIVIDER_LOCATION_LIMITED = "editorHorizontalDividerLocationLimited";
public static final String KEY_EDITOR_DECKAREA_SETTINGS = "editorDeckAreaSettings";
// user list
@@ -313,14 +314,14 @@ public class PreferencesDialog extends javax.swing.JDialog {
private static final Border BLACK_BORDER = BorderFactory.createLineBorder(Color.BLACK, 3);
private static int selectedAvatarId;
-
+
private static ThemeType currentTheme = null;
-
+
public static ThemeType getCurrentTheme() {
if (currentTheme == null) {
currentTheme = ThemeType.valueByName(getCachedValue(KEY_THEME, "Default Theme"));
}
-
+
return currentTheme;
}
@@ -657,29 +658,29 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout main_cardLayout = new org.jdesktop.layout.GroupLayout(main_card);
main_card.setLayout(main_cardLayout);
main_cardLayout.setHorizontalGroup(
- main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(main_cardLayout.createSequentialGroup()
- .add(6, 6, 6)
- .add(main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
- .add(tooltipDelayLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(tooltipDelay, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .add(main_cardLayout.createSequentialGroup()
- .add(showCardName)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(showFullImagePath)))
- .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(main_cardLayout.createSequentialGroup()
+ .add(6, 6, 6)
+ .add(main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
+ .add(tooltipDelayLabel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(tooltipDelay, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .add(main_cardLayout.createSequentialGroup()
+ .add(showCardName)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(showFullImagePath)))
+ .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
main_cardLayout.setVerticalGroup(
- main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(main_cardLayout.createSequentialGroup()
- .add(main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(showCardName)
- .add(showFullImagePath))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(tooltipDelayLabel)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(tooltipDelay, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(main_cardLayout.createSequentialGroup()
+ .add(main_cardLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(showCardName)
+ .add(showFullImagePath))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(tooltipDelayLabel)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(tooltipDelay, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
main_game.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Game"));
@@ -766,48 +767,48 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout main_gameLayout = new org.jdesktop.layout.GroupLayout(main_game);
main_game.setLayout(main_gameLayout);
main_gameLayout.setHorizontalGroup(
- main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(main_gameLayout.createSequentialGroup()
- .addContainerGap()
- .add(main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(main_gameLayout.createSequentialGroup()
- .add(main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
- .add(showPlayerNamesPermanently, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(nonLandPermanentsInOnePile, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(cbConfirmEmptyManaPool, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(cbAllowRequestToShowHandCards, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(cbShowStormCounter, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(cbAskMoveToGraveOrder, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(showAbilityPickerForced, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .add(0, 0, Short.MAX_VALUE))
- .add(displayLifeOnAvatar, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addContainerGap())
+ main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(main_gameLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(main_gameLayout.createSequentialGroup()
+ .add(main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
+ .add(showPlayerNamesPermanently, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(nonLandPermanentsInOnePile, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(cbConfirmEmptyManaPool, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(cbAllowRequestToShowHandCards, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(cbShowStormCounter, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(cbAskMoveToGraveOrder, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(showAbilityPickerForced, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .add(0, 0, Short.MAX_VALUE))
+ .add(displayLifeOnAvatar, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addContainerGap())
);
main_gameLayout.setVerticalGroup(
- main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(main_gameLayout.createSequentialGroup()
- .add(nonLandPermanentsInOnePile)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(showPlayerNamesPermanently)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(displayLifeOnAvatar)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(showAbilityPickerForced)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(cbAllowRequestToShowHandCards)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(cbShowStormCounter)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(cbConfirmEmptyManaPool)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(cbAskMoveToGraveOrder))
+ main_gameLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(main_gameLayout.createSequentialGroup()
+ .add(nonLandPermanentsInOnePile)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(showPlayerNamesPermanently)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(displayLifeOnAvatar)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(showAbilityPickerForced)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(cbAllowRequestToShowHandCards)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(cbShowStormCounter)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(cbConfirmEmptyManaPool)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(cbAskMoveToGraveOrder))
);
nonLandPermanentsInOnePile.getAccessibleContext().setAccessibleName("nonLandPermanentsInOnePile");
main_battlefield.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Battlefield"));
- cbBattlefieldFeedbackColorizingMode.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Disable colorizing", "Enable one color for all phases", "Enable multicolor for different phases" }));
+ cbBattlefieldFeedbackColorizingMode.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Disable colorizing", "Enable one color for all phases", "Enable multicolor for different phases"}));
cbBattlefieldFeedbackColorizingMode.setToolTipText("Battlefield feedback panel colorizing on your turn (e.g. use green color if you must select card or answer to request)");
cbBattlefieldFeedbackColorizingMode.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -821,46 +822,46 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout main_battlefieldLayout = new org.jdesktop.layout.GroupLayout(main_battlefield);
main_battlefield.setLayout(main_battlefieldLayout);
main_battlefieldLayout.setHorizontalGroup(
- main_battlefieldLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(main_battlefieldLayout.createSequentialGroup()
- .addContainerGap()
- .add(lblBattlefieldFeedbackColorizingMode)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(cbBattlefieldFeedbackColorizingMode, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 278, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ main_battlefieldLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(main_battlefieldLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(lblBattlefieldFeedbackColorizingMode)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(cbBattlefieldFeedbackColorizingMode, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 278, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
main_battlefieldLayout.setVerticalGroup(
- main_battlefieldLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(main_battlefieldLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(lblBattlefieldFeedbackColorizingMode)
- .add(cbBattlefieldFeedbackColorizingMode, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ main_battlefieldLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(main_battlefieldLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(lblBattlefieldFeedbackColorizingMode)
+ .add(cbBattlefieldFeedbackColorizingMode, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
);
org.jdesktop.layout.GroupLayout tabMainLayout = new org.jdesktop.layout.GroupLayout(tabMain);
tabMain.setLayout(tabMainLayout);
tabMainLayout.setHorizontalGroup(
- tabMainLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabMainLayout.createSequentialGroup()
- .addContainerGap()
- .add(tabMainLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(org.jdesktop.layout.GroupLayout.TRAILING, main_card, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(org.jdesktop.layout.GroupLayout.TRAILING, main_gamelog, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(main_game, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(org.jdesktop.layout.GroupLayout.TRAILING, main_battlefield, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addContainerGap())
+ tabMainLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabMainLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(tabMainLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(org.jdesktop.layout.GroupLayout.TRAILING, main_card, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(org.jdesktop.layout.GroupLayout.TRAILING, main_gamelog, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(main_game, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(org.jdesktop.layout.GroupLayout.TRAILING, main_battlefield, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addContainerGap())
);
tabMainLayout.setVerticalGroup(
- tabMainLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabMainLayout.createSequentialGroup()
- .addContainerGap()
- .add(main_card, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(main_game, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(main_gamelog, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(main_battlefield, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(23, Short.MAX_VALUE))
+ tabMainLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabMainLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(main_card, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(main_game, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(main_gamelog, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(main_battlefield, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(23, Short.MAX_VALUE))
);
main_card.getAccessibleContext().setAccessibleName("Game panel");
@@ -870,18 +871,18 @@ public class PreferencesDialog extends javax.swing.JDialog {
tabGuiSize.setMaximumSize(new java.awt.Dimension(527, 423));
tabGuiSize.setMinimumSize(new java.awt.Dimension(527, 423));
java.awt.GridBagLayout tabGuiSizeLayout = new java.awt.GridBagLayout();
- tabGuiSizeLayout.columnWidths = new int[] {0};
- tabGuiSizeLayout.rowHeights = new int[] {0, 20, 0};
- tabGuiSizeLayout.columnWeights = new double[] {1.0};
- tabGuiSizeLayout.rowWeights = new double[] {1.0, 0.0, 1.0};
+ tabGuiSizeLayout.columnWidths = new int[]{0};
+ tabGuiSizeLayout.rowHeights = new int[]{0, 20, 0};
+ tabGuiSizeLayout.columnWeights = new double[]{1.0};
+ tabGuiSizeLayout.rowWeights = new double[]{1.0, 0.0, 1.0};
tabGuiSize.setLayout(tabGuiSizeLayout);
guiSizeBasic.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Size basic elements"));
guiSizeBasic.setMinimumSize(new java.awt.Dimension(600, 180));
guiSizeBasic.setPreferredSize(new java.awt.Dimension(600, 180));
java.awt.GridBagLayout guiSizeBasicLayout = new java.awt.GridBagLayout();
- guiSizeBasicLayout.columnWeights = new double[] {1.0, 1.0, 1.0};
- guiSizeBasicLayout.rowWeights = new double[] {1.0, 0.2, 1.0, 0.2};
+ guiSizeBasicLayout.columnWeights = new double[]{1.0, 1.0, 1.0};
+ guiSizeBasicLayout.rowWeights = new double[]{1.0, 0.2, 1.0, 0.2};
guiSizeBasic.setLayout(guiSizeBasicLayout);
sliderFontSize.setMajorTickSpacing(5);
@@ -1070,8 +1071,8 @@ public class PreferencesDialog extends javax.swing.JDialog {
guiSizeGame.setMinimumSize(new java.awt.Dimension(600, 180));
guiSizeGame.setPreferredSize(new java.awt.Dimension(600, 180));
java.awt.GridBagLayout guiSizeGameLayout = new java.awt.GridBagLayout();
- guiSizeGameLayout.columnWeights = new double[] {1.0, 1.0, 1.0, 1.0};
- guiSizeGameLayout.rowWeights = new double[] {1.0, 0.2, 1.0, 0.2};
+ guiSizeGameLayout.columnWeights = new double[]{1.0, 1.0, 1.0, 1.0};
+ guiSizeGameLayout.rowWeights = new double[]{1.0, 0.2, 1.0, 0.2};
guiSizeGame.setLayout(guiSizeGameLayout);
sliderCardSizeHand.setMajorTickSpacing(5);
@@ -1415,115 +1416,115 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout tabPhasesLayout = new org.jdesktop.layout.GroupLayout(tabPhases);
tabPhases.setLayout(tabPhasesLayout);
tabPhasesLayout.setHorizontalGroup(
- tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabPhasesLayout.createSequentialGroup()
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabPhasesLayout.createSequentialGroup()
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabPhasesLayout.createSequentialGroup()
- .add(20, 20, 20)
+ tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabPhasesLayout.createSequentialGroup()
.add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabPhasesLayout.createSequentialGroup()
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(jLabelUpkeep)
- .add(jLabelBeforeCombat)
- .add(jLabelEndofCombat)
- .add(jLabelMain2)
- .add(jLabelEndOfTurn))
- .add(77, 77, 77)
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabPhasesLayout.createSequentialGroup()
- .add(2, 2, 2)
- .add(jLabelYourTurn)
- .add(32, 32, 32)
- .add(jLabelOpponentsTurn))
- .add(tabPhasesLayout.createSequentialGroup()
- .add(13, 13, 13)
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(checkBoxDrawYou)
- .add(checkBoxUpkeepYou)
- .add(checkBoxMainYou)
- .add(checkBoxBeforeCYou)
- .add(checkBoxEndOfCYou)
- .add(checkBoxMain2You)
- .add(checkBoxEndTurnYou))
- .add(78, 78, 78)
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(checkBoxUpkeepOthers)
- .add(checkBoxBeforeCOthers)
- .add(checkBoxMainOthers)
- .add(checkBoxEndOfCOthers)
- .add(checkBoxDrawOthers)
- .add(checkBoxMain2Others)
- .add(checkBoxEndTurnOthers)))))
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
- .add(org.jdesktop.layout.GroupLayout.LEADING, jLabelMain1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(org.jdesktop.layout.GroupLayout.LEADING, jLabelDraw, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
- .add(tabPhasesLayout.createSequentialGroup()
- .addContainerGap()
- .add(jLabelHeadLine)))
- .add(0, 0, Short.MAX_VALUE))
- .add(tabPhasesLayout.createSequentialGroup()
- .addContainerGap()
- .add(phases_stopSettings, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
- .addContainerGap())
+ .add(tabPhasesLayout.createSequentialGroup()
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabPhasesLayout.createSequentialGroup()
+ .add(20, 20, 20)
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabPhasesLayout.createSequentialGroup()
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(jLabelUpkeep)
+ .add(jLabelBeforeCombat)
+ .add(jLabelEndofCombat)
+ .add(jLabelMain2)
+ .add(jLabelEndOfTurn))
+ .add(77, 77, 77)
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabPhasesLayout.createSequentialGroup()
+ .add(2, 2, 2)
+ .add(jLabelYourTurn)
+ .add(32, 32, 32)
+ .add(jLabelOpponentsTurn))
+ .add(tabPhasesLayout.createSequentialGroup()
+ .add(13, 13, 13)
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(checkBoxDrawYou)
+ .add(checkBoxUpkeepYou)
+ .add(checkBoxMainYou)
+ .add(checkBoxBeforeCYou)
+ .add(checkBoxEndOfCYou)
+ .add(checkBoxMain2You)
+ .add(checkBoxEndTurnYou))
+ .add(78, 78, 78)
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(checkBoxUpkeepOthers)
+ .add(checkBoxBeforeCOthers)
+ .add(checkBoxMainOthers)
+ .add(checkBoxEndOfCOthers)
+ .add(checkBoxDrawOthers)
+ .add(checkBoxMain2Others)
+ .add(checkBoxEndTurnOthers)))))
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
+ .add(org.jdesktop.layout.GroupLayout.LEADING, jLabelMain1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(org.jdesktop.layout.GroupLayout.LEADING, jLabelDraw, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
+ .add(tabPhasesLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(jLabelHeadLine)))
+ .add(0, 0, Short.MAX_VALUE))
+ .add(tabPhasesLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(phases_stopSettings, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+ .addContainerGap())
);
tabPhasesLayout.setVerticalGroup(
- tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabPhasesLayout.createSequentialGroup()
- .addContainerGap()
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(tabPhasesLayout.createSequentialGroup()
- .add(jLabelOpponentsTurn)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(checkBoxUpkeepOthers))
- .add(tabPhasesLayout.createSequentialGroup()
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(tabPhasesLayout.createSequentialGroup()
- .add(jLabelHeadLine)
- .add(20, 20, 20))
- .add(jLabelYourTurn))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(checkBoxUpkeepYou)
- .add(jLabelUpkeep))))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(jLabelDraw)
- .add(checkBoxDrawYou)
- .add(checkBoxDrawOthers))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(jLabelMain1)
- .add(checkBoxMainYou)
- .add(checkBoxMainOthers))
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabPhasesLayout.createSequentialGroup()
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(org.jdesktop.layout.GroupLayout.TRAILING, jLabelBeforeCombat)
- .add(org.jdesktop.layout.GroupLayout.TRAILING, checkBoxBeforeCYou)))
- .add(tabPhasesLayout.createSequentialGroup()
- .add(6, 6, 6)
- .add(checkBoxBeforeCOthers)))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(jLabelEndofCombat)
- .add(checkBoxEndOfCYou)
- .add(checkBoxEndOfCOthers))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(jLabelMain2)
- .add(checkBoxMain2You)
- .add(checkBoxMain2Others))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(checkBoxEndTurnYou)
- .add(jLabelEndOfTurn)
- .add(checkBoxEndTurnOthers))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(phases_stopSettings, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabPhasesLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(tabPhasesLayout.createSequentialGroup()
+ .add(jLabelOpponentsTurn)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(checkBoxUpkeepOthers))
+ .add(tabPhasesLayout.createSequentialGroup()
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(tabPhasesLayout.createSequentialGroup()
+ .add(jLabelHeadLine)
+ .add(20, 20, 20))
+ .add(jLabelYourTurn))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(checkBoxUpkeepYou)
+ .add(jLabelUpkeep))))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(jLabelDraw)
+ .add(checkBoxDrawYou)
+ .add(checkBoxDrawOthers))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(jLabelMain1)
+ .add(checkBoxMainYou)
+ .add(checkBoxMainOthers))
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabPhasesLayout.createSequentialGroup()
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(org.jdesktop.layout.GroupLayout.TRAILING, jLabelBeforeCombat)
+ .add(org.jdesktop.layout.GroupLayout.TRAILING, checkBoxBeforeCYou)))
+ .add(tabPhasesLayout.createSequentialGroup()
+ .add(6, 6, 6)
+ .add(checkBoxBeforeCOthers)))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(jLabelEndofCombat)
+ .add(checkBoxEndOfCYou)
+ .add(checkBoxEndOfCOthers))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(jLabelMain2)
+ .add(checkBoxMain2You)
+ .add(checkBoxMain2Others))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(tabPhasesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(checkBoxEndTurnYou)
+ .add(jLabelEndOfTurn)
+ .add(checkBoxEndTurnOthers))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(phases_stopSettings, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
tabsPanel.addTab("Phases & Priority", tabPhases);
@@ -1554,7 +1555,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
});
cbPreferedImageLanguage.setMaximumRowCount(20);
- cbPreferedImageLanguage.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+ cbPreferedImageLanguage.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"}));
labelPreferedImageLanguage.setText("Default images language:");
labelPreferedImageLanguage.setFocusable(false);
@@ -1562,57 +1563,57 @@ public class PreferencesDialog extends javax.swing.JDialog {
labelNumberOfDownloadThreads.setText("Number of download threads:");
cbNumberOfDownloadThreads.setMaximumRowCount(20);
- cbNumberOfDownloadThreads.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+ cbNumberOfDownloadThreads.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"}));
labelHint1.setText("(change it to 1-3 if image source bans your IP for too many connections)");
org.jdesktop.layout.GroupLayout panelCardImagesLayout = new org.jdesktop.layout.GroupLayout(panelCardImages);
panelCardImages.setLayout(panelCardImagesLayout);
panelCardImagesLayout.setHorizontalGroup(
- panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(panelCardImagesLayout.createSequentialGroup()
- .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(panelCardImagesLayout.createSequentialGroup()
- .add(cbUseDefaultImageFolder)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(txtImageFolderPath)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(btnBrowseImageLocation))
- .add(panelCardImagesLayout.createSequentialGroup()
- .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(cbSaveToZipFiles)
- .add(panelCardImagesLayout.createSequentialGroup()
+ panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(panelCardImagesLayout.createSequentialGroup()
.add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(labelNumberOfDownloadThreads)
- .add(labelPreferedImageLanguage))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(cbPreferedImageLanguage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 153, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(panelCardImagesLayout.createSequentialGroup()
- .add(cbNumberOfDownloadThreads, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 153, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(labelHint1)))))
- .add(0, 0, Short.MAX_VALUE)))
- .addContainerGap())
+ .add(panelCardImagesLayout.createSequentialGroup()
+ .add(cbUseDefaultImageFolder)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(txtImageFolderPath)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(btnBrowseImageLocation))
+ .add(panelCardImagesLayout.createSequentialGroup()
+ .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(cbSaveToZipFiles)
+ .add(panelCardImagesLayout.createSequentialGroup()
+ .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(labelNumberOfDownloadThreads)
+ .add(labelPreferedImageLanguage))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(cbPreferedImageLanguage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 153, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(panelCardImagesLayout.createSequentialGroup()
+ .add(cbNumberOfDownloadThreads, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 153, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(labelHint1)))))
+ .add(0, 0, Short.MAX_VALUE)))
+ .addContainerGap())
);
panelCardImagesLayout.setVerticalGroup(
- panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(panelCardImagesLayout.createSequentialGroup()
- .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(cbUseDefaultImageFolder)
- .add(txtImageFolderPath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(btnBrowseImageLocation))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(cbSaveToZipFiles)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(labelNumberOfDownloadThreads)
- .add(cbNumberOfDownloadThreads, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(labelHint1))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(labelPreferedImageLanguage)
- .add(cbPreferedImageLanguage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
+ panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(panelCardImagesLayout.createSequentialGroup()
+ .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(cbUseDefaultImageFolder)
+ .add(txtImageFolderPath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(btnBrowseImageLocation))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(cbSaveToZipFiles)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(labelNumberOfDownloadThreads)
+ .add(cbNumberOfDownloadThreads, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(labelHint1))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(panelCardImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(labelPreferedImageLanguage)
+ .add(cbPreferedImageLanguage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
);
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Card styles (restart xmage to apply new settings)"));
@@ -1641,23 +1642,23 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
- jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(jPanel1Layout.createSequentialGroup()
- .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(cbCardRenderImageFallback)
- .add(cbCardRenderShowReminderText)
- .add(cbCardRenderHideSetSymbol))
- .add(0, 0, Short.MAX_VALUE))
+ jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(jPanel1Layout.createSequentialGroup()
+ .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(cbCardRenderImageFallback)
+ .add(cbCardRenderShowReminderText)
+ .add(cbCardRenderHideSetSymbol))
+ .add(0, 0, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
- jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(jPanel1Layout.createSequentialGroup()
- .add(cbCardRenderImageFallback)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(cbCardRenderShowReminderText)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(cbCardRenderHideSetSymbol)
- .add(0, 0, Short.MAX_VALUE))
+ jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(jPanel1Layout.createSequentialGroup()
+ .add(cbCardRenderImageFallback)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(cbCardRenderShowReminderText)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(cbCardRenderHideSetSymbol)
+ .add(0, 0, Short.MAX_VALUE))
);
panelBackgroundImages.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Background images"));
@@ -1712,65 +1713,65 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout panelBackgroundImagesLayout = new org.jdesktop.layout.GroupLayout(panelBackgroundImages);
panelBackgroundImages.setLayout(panelBackgroundImagesLayout);
panelBackgroundImagesLayout.setHorizontalGroup(
- panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(panelBackgroundImagesLayout.createSequentialGroup()
- .add(panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(panelBackgroundImagesLayout.createSequentialGroup()
- .add(cbUseDefaultBackground)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(txtBackgroundImagePath)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(btnBrowseBackgroundImage))
- .add(panelBackgroundImagesLayout.createSequentialGroup()
- .add(cbUseRandomBattleImage)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(txtBattlefieldImagePath)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(btnBrowseBattlefieldImage))
- .add(panelBackgroundImagesLayout.createSequentialGroup()
- .add(cbUseDefaultBattleImage)
- .add(0, 0, Short.MAX_VALUE)))
- .addContainerGap())
+ panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(panelBackgroundImagesLayout.createSequentialGroup()
+ .add(panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(panelBackgroundImagesLayout.createSequentialGroup()
+ .add(cbUseDefaultBackground)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(txtBackgroundImagePath)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(btnBrowseBackgroundImage))
+ .add(panelBackgroundImagesLayout.createSequentialGroup()
+ .add(cbUseRandomBattleImage)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(txtBattlefieldImagePath)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(btnBrowseBattlefieldImage))
+ .add(panelBackgroundImagesLayout.createSequentialGroup()
+ .add(cbUseDefaultBattleImage)
+ .add(0, 0, Short.MAX_VALUE)))
+ .addContainerGap())
);
panelBackgroundImagesLayout.setVerticalGroup(
- panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(panelBackgroundImagesLayout.createSequentialGroup()
- .add(cbUseDefaultBattleImage)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(cbUseDefaultBackground)
- .add(txtBackgroundImagePath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(btnBrowseBackgroundImage))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(cbUseRandomBattleImage)
- .add(txtBattlefieldImagePath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(btnBrowseBattlefieldImage))
- .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(panelBackgroundImagesLayout.createSequentialGroup()
+ .add(cbUseDefaultBattleImage)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(cbUseDefaultBackground)
+ .add(txtBackgroundImagePath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(btnBrowseBackgroundImage))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(panelBackgroundImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(cbUseRandomBattleImage)
+ .add(txtBattlefieldImagePath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(btnBrowseBattlefieldImage))
+ .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
org.jdesktop.layout.GroupLayout tabImagesLayout = new org.jdesktop.layout.GroupLayout(tabImages);
tabImages.setLayout(tabImagesLayout);
tabImagesLayout.setHorizontalGroup(
- tabImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabImagesLayout.createSequentialGroup()
- .addContainerGap()
- .add(tabImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(panelCardImages, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(panelBackgroundImages, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addContainerGap())
+ tabImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabImagesLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(tabImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(panelCardImages, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(panelBackgroundImages, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addContainerGap())
);
tabImagesLayout.setVerticalGroup(
- tabImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabImagesLayout.createSequentialGroup()
- .addContainerGap()
- .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(panelCardImages, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(panelBackgroundImages, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ tabImagesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabImagesLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(panelCardImages, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(panelBackgroundImages, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
tabsPanel.addTab("Images", tabImages);
@@ -1844,48 +1845,48 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout sounds_backgroundMusicLayout = new org.jdesktop.layout.GroupLayout(sounds_backgroundMusic);
sounds_backgroundMusic.setLayout(sounds_backgroundMusicLayout);
sounds_backgroundMusicLayout.setHorizontalGroup(
- sounds_backgroundMusicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(sounds_backgroundMusicLayout.createSequentialGroup()
- .addContainerGap()
- .add(jLabel16)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(txtBattlefieldIBGMPath)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(btnBattlefieldBGMBrowse))
- .add(sounds_backgroundMusicLayout.createSequentialGroup()
- .add(cbEnableBattlefieldBGM)
- .add(0, 0, Short.MAX_VALUE))
+ sounds_backgroundMusicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(sounds_backgroundMusicLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(jLabel16)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(txtBattlefieldIBGMPath)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(btnBattlefieldBGMBrowse))
+ .add(sounds_backgroundMusicLayout.createSequentialGroup()
+ .add(cbEnableBattlefieldBGM)
+ .add(0, 0, Short.MAX_VALUE))
);
sounds_backgroundMusicLayout.setVerticalGroup(
- sounds_backgroundMusicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(sounds_backgroundMusicLayout.createSequentialGroup()
- .add(cbEnableBattlefieldBGM)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(sounds_backgroundMusicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(txtBattlefieldIBGMPath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(btnBattlefieldBGMBrowse)
- .add(jLabel16)))
+ sounds_backgroundMusicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(sounds_backgroundMusicLayout.createSequentialGroup()
+ .add(cbEnableBattlefieldBGM)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(sounds_backgroundMusicLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(txtBattlefieldIBGMPath, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(btnBattlefieldBGMBrowse)
+ .add(jLabel16)))
);
org.jdesktop.layout.GroupLayout tabSoundsLayout = new org.jdesktop.layout.GroupLayout(tabSounds);
tabSounds.setLayout(tabSoundsLayout);
tabSoundsLayout.setHorizontalGroup(
- tabSoundsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabSoundsLayout.createSequentialGroup()
- .addContainerGap()
- .add(tabSoundsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(sounds_clips, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(org.jdesktop.layout.GroupLayout.TRAILING, sounds_backgroundMusic, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addContainerGap())
+ tabSoundsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabSoundsLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(tabSoundsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(sounds_clips, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(org.jdesktop.layout.GroupLayout.TRAILING, sounds_backgroundMusic, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addContainerGap())
);
tabSoundsLayout.setVerticalGroup(
- tabSoundsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabSoundsLayout.createSequentialGroup()
- .addContainerGap()
- .add(sounds_clips, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(sounds_backgroundMusic, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ tabSoundsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabSoundsLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(sounds_clips, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(sounds_backgroundMusic, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
sounds_clips.getAccessibleContext().setAccessibleDescription("");
@@ -1909,12 +1910,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel10Layout = new org.jdesktop.layout.GroupLayout(jPanel10);
jPanel10.setLayout(jPanel10Layout);
jPanel10Layout.setHorizontalGroup(
- jPanel10Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel10Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel10Layout.setVerticalGroup(
- jPanel10Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel10Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel10);
@@ -1927,12 +1928,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel11Layout = new org.jdesktop.layout.GroupLayout(jPanel11);
jPanel11.setLayout(jPanel11Layout);
jPanel11Layout.setHorizontalGroup(
- jPanel11Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel11Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel11Layout.setVerticalGroup(
- jPanel11Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel11Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel11);
@@ -1945,12 +1946,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel12Layout = new org.jdesktop.layout.GroupLayout(jPanel12);
jPanel12.setLayout(jPanel12Layout);
jPanel12Layout.setHorizontalGroup(
- jPanel12Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel12Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel12Layout.setVerticalGroup(
- jPanel12Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel12Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel12);
@@ -1963,12 +1964,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel13Layout = new org.jdesktop.layout.GroupLayout(jPanel13);
jPanel13.setLayout(jPanel13Layout);
jPanel13Layout.setHorizontalGroup(
- jPanel13Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel13Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel13Layout.setVerticalGroup(
- jPanel13Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel13Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel13);
@@ -1981,12 +1982,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel14Layout = new org.jdesktop.layout.GroupLayout(jPanel14);
jPanel14.setLayout(jPanel14Layout);
jPanel14Layout.setHorizontalGroup(
- jPanel14Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel14Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel14Layout.setVerticalGroup(
- jPanel14Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel14Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel14);
@@ -1999,12 +2000,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel15Layout = new org.jdesktop.layout.GroupLayout(jPanel15);
jPanel15.setLayout(jPanel15Layout);
jPanel15Layout.setHorizontalGroup(
- jPanel15Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel15Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel15Layout.setVerticalGroup(
- jPanel15Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel15Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel15);
@@ -2017,12 +2018,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel16Layout = new org.jdesktop.layout.GroupLayout(jPanel16);
jPanel16.setLayout(jPanel16Layout);
jPanel16Layout.setHorizontalGroup(
- jPanel16Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel16Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel16Layout.setVerticalGroup(
- jPanel16Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel16Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel16);
@@ -2035,12 +2036,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel17Layout = new org.jdesktop.layout.GroupLayout(jPanel17);
jPanel17.setLayout(jPanel17Layout);
jPanel17Layout.setHorizontalGroup(
- jPanel17Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel17Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel17Layout.setVerticalGroup(
- jPanel17Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel17Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel17);
@@ -2053,12 +2054,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel18Layout = new org.jdesktop.layout.GroupLayout(jPanel18);
jPanel18.setLayout(jPanel18Layout);
jPanel18Layout.setHorizontalGroup(
- jPanel18Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel18Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel18Layout.setVerticalGroup(
- jPanel18Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel18Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel18);
@@ -2071,12 +2072,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel19Layout = new org.jdesktop.layout.GroupLayout(jPanel19);
jPanel19.setLayout(jPanel19Layout);
jPanel19Layout.setHorizontalGroup(
- jPanel19Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel19Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel19Layout.setVerticalGroup(
- jPanel19Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel19Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel19);
@@ -2089,12 +2090,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel20Layout = new org.jdesktop.layout.GroupLayout(jPanel20);
jPanel20.setLayout(jPanel20Layout);
jPanel20Layout.setHorizontalGroup(
- jPanel20Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel20Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel20Layout.setVerticalGroup(
- jPanel20Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel20Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel20);
@@ -2107,12 +2108,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel21Layout = new org.jdesktop.layout.GroupLayout(jPanel21);
jPanel21.setLayout(jPanel21Layout);
jPanel21Layout.setHorizontalGroup(
- jPanel21Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel21Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel21Layout.setVerticalGroup(
- jPanel21Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel21Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel21);
@@ -2125,12 +2126,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel22Layout = new org.jdesktop.layout.GroupLayout(jPanel22);
jPanel22.setLayout(jPanel22Layout);
jPanel22Layout.setHorizontalGroup(
- jPanel22Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel22Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel22Layout.setVerticalGroup(
- jPanel22Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel22Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel22);
@@ -2143,12 +2144,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel23Layout = new org.jdesktop.layout.GroupLayout(jPanel23);
jPanel23.setLayout(jPanel23Layout);
jPanel23Layout.setHorizontalGroup(
- jPanel23Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel23Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel23Layout.setVerticalGroup(
- jPanel23Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel23Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel23);
@@ -2161,12 +2162,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel24Layout = new org.jdesktop.layout.GroupLayout(jPanel24);
jPanel24.setLayout(jPanel24Layout);
jPanel24Layout.setHorizontalGroup(
- jPanel24Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel24Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel24Layout.setVerticalGroup(
- jPanel24Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel24Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel24);
@@ -2179,12 +2180,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel25Layout = new org.jdesktop.layout.GroupLayout(jPanel25);
jPanel25.setLayout(jPanel25Layout);
jPanel25Layout.setHorizontalGroup(
- jPanel25Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel25Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel25Layout.setVerticalGroup(
- jPanel25Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel25Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel25);
@@ -2197,12 +2198,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel26Layout = new org.jdesktop.layout.GroupLayout(jPanel26);
jPanel26.setLayout(jPanel26Layout);
jPanel26Layout.setHorizontalGroup(
- jPanel26Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel26Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel26Layout.setVerticalGroup(
- jPanel26Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel26Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel26);
@@ -2215,12 +2216,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel27Layout = new org.jdesktop.layout.GroupLayout(jPanel27);
jPanel27.setLayout(jPanel27Layout);
jPanel27Layout.setHorizontalGroup(
- jPanel27Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel27Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel27Layout.setVerticalGroup(
- jPanel27Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel27Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel27);
@@ -2233,12 +2234,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel28Layout = new org.jdesktop.layout.GroupLayout(jPanel28);
jPanel28.setLayout(jPanel28Layout);
jPanel28Layout.setHorizontalGroup(
- jPanel28Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel28Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel28Layout.setVerticalGroup(
- jPanel28Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel28Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel28);
@@ -2251,12 +2252,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel29Layout = new org.jdesktop.layout.GroupLayout(jPanel29);
jPanel29.setLayout(jPanel29Layout);
jPanel29Layout.setHorizontalGroup(
- jPanel29Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel29Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel29Layout.setVerticalGroup(
- jPanel29Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel29Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel29);
@@ -2269,12 +2270,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel30Layout = new org.jdesktop.layout.GroupLayout(jPanel30);
jPanel30.setLayout(jPanel30Layout);
jPanel30Layout.setHorizontalGroup(
- jPanel30Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel30Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel30Layout.setVerticalGroup(
- jPanel30Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel30Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel30);
@@ -2287,12 +2288,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel31Layout = new org.jdesktop.layout.GroupLayout(jPanel31);
jPanel31.setLayout(jPanel31Layout);
jPanel31Layout.setHorizontalGroup(
- jPanel31Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel31Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel31Layout.setVerticalGroup(
- jPanel31Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel31Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel31);
@@ -2305,12 +2306,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel32Layout = new org.jdesktop.layout.GroupLayout(jPanel32);
jPanel32.setLayout(jPanel32Layout);
jPanel32Layout.setHorizontalGroup(
- jPanel32Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel32Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel32Layout.setVerticalGroup(
- jPanel32Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel32Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel32);
@@ -2322,12 +2323,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout jPanel33Layout = new org.jdesktop.layout.GroupLayout(jPanel33);
jPanel33.setLayout(jPanel33Layout);
jPanel33Layout.setHorizontalGroup(
- jPanel33Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel33Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
jPanel33Layout.setVerticalGroup(
- jPanel33Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 0, Short.MAX_VALUE)
+ jPanel33Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 0, Short.MAX_VALUE)
);
avatarPanel.add(jPanel33);
@@ -2337,16 +2338,16 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout tabAvatarsLayout = new org.jdesktop.layout.GroupLayout(tabAvatars);
tabAvatars.setLayout(tabAvatarsLayout);
tabAvatarsLayout.setHorizontalGroup(
- tabAvatarsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabAvatarsLayout.createSequentialGroup()
- .add(avatarPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 528, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(0, 0, Short.MAX_VALUE))
+ tabAvatarsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabAvatarsLayout.createSequentialGroup()
+ .add(avatarPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 528, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(0, 0, Short.MAX_VALUE))
);
tabAvatarsLayout.setVerticalGroup(
- tabAvatarsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabAvatarsLayout.createSequentialGroup()
- .add(avatarPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addContainerGap())
+ tabAvatarsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabAvatarsLayout.createSequentialGroup()
+ .add(avatarPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addContainerGap())
);
tabsPanel.addTab("Avatars", tabAvatars);
@@ -2369,27 +2370,27 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout connection_serversLayout = new org.jdesktop.layout.GroupLayout(connection_servers);
connection_servers.setLayout(connection_serversLayout);
connection_serversLayout.setHorizontalGroup(
- connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(connection_serversLayout.createSequentialGroup()
- .add(connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(connection_serversLayout.createSequentialGroup()
- .addContainerGap()
- .add(lblURLServerList, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 96, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(txtURLServerList, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 370, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .add(connection_serversLayout.createSequentialGroup()
- .add(141, 141, 141)
- .add(jLabel17)))
- .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(connection_serversLayout.createSequentialGroup()
+ .add(connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(connection_serversLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(lblURLServerList, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 96, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(txtURLServerList, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 370, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .add(connection_serversLayout.createSequentialGroup()
+ .add(141, 141, 141)
+ .add(jLabel17)))
+ .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
connection_serversLayout.setVerticalGroup(
- connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(connection_serversLayout.createSequentialGroup()
- .add(connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
- .add(lblURLServerList, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(txtURLServerList, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(jLabel17))
+ connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(connection_serversLayout.createSequentialGroup()
+ .add(connection_serversLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
+ .add(lblURLServerList, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(txtURLServerList, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(jLabel17))
);
lblProxyType.setText("Proxy:");
@@ -2435,99 +2436,99 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout pnlProxyLayout = new org.jdesktop.layout.GroupLayout(pnlProxy);
pnlProxy.setLayout(pnlProxyLayout);
pnlProxyLayout.setHorizontalGroup(
- pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(pnlProxyLayout.createSequentialGroup()
- .addContainerGap()
- .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(pnlProxyLayout.createSequentialGroup()
- .add(rememberPswd)
- .add(47, 47, 47)
- .add(jLabel11)
- .add(34, 34, 34))
- .add(pnlProxyLayout.createSequentialGroup()
- .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(lblProxyPort)
- .add(lblProxyPassword)
- .add(lblProxyServer)
- .add(lblProxyUserName))
- .add(19, 19, 19)
- .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(txtProxyPort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
- .add(org.jdesktop.layout.GroupLayout.LEADING, txtPasswordField)
- .add(org.jdesktop.layout.GroupLayout.LEADING, txtProxyUserName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 148, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .add(txtProxyServer))
- .addContainerGap())))
+ pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(pnlProxyLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(pnlProxyLayout.createSequentialGroup()
+ .add(rememberPswd)
+ .add(47, 47, 47)
+ .add(jLabel11)
+ .add(34, 34, 34))
+ .add(pnlProxyLayout.createSequentialGroup()
+ .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(lblProxyPort)
+ .add(lblProxyPassword)
+ .add(lblProxyServer)
+ .add(lblProxyUserName))
+ .add(19, 19, 19)
+ .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(txtProxyPort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
+ .add(org.jdesktop.layout.GroupLayout.LEADING, txtPasswordField)
+ .add(org.jdesktop.layout.GroupLayout.LEADING, txtProxyUserName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 148, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .add(txtProxyServer))
+ .addContainerGap())))
);
pnlProxyLayout.setVerticalGroup(
- pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(pnlProxyLayout.createSequentialGroup()
- .add(6, 6, 6)
- .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(txtProxyServer, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(lblProxyServer))
- .add(8, 8, 8)
- .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(lblProxyPort)
- .add(txtProxyPort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(txtProxyUserName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(lblProxyUserName))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(txtPasswordField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(lblProxyPassword))
- .add(18, 18, 18)
- .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(rememberPswd)
- .add(jLabel11))
- .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(pnlProxyLayout.createSequentialGroup()
+ .add(6, 6, 6)
+ .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(txtProxyServer, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(lblProxyServer))
+ .add(8, 8, 8)
+ .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(lblProxyPort)
+ .add(txtProxyPort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(txtProxyUserName, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(lblProxyUserName))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(txtPasswordField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(lblProxyPassword))
+ .add(18, 18, 18)
+ .add(pnlProxyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(rememberPswd)
+ .add(jLabel11))
+ .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
org.jdesktop.layout.GroupLayout pnlProxySettingsLayout = new org.jdesktop.layout.GroupLayout(pnlProxySettings);
pnlProxySettings.setLayout(pnlProxySettingsLayout);
pnlProxySettingsLayout.setHorizontalGroup(
- pnlProxySettingsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(pnlProxySettingsLayout.createSequentialGroup()
- .addContainerGap()
- .add(pnlProxy, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addContainerGap())
+ pnlProxySettingsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(pnlProxySettingsLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(pnlProxy, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addContainerGap())
);
pnlProxySettingsLayout.setVerticalGroup(
- pnlProxySettingsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(pnlProxySettingsLayout.createSequentialGroup()
- .add(pnlProxy, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addContainerGap())
+ pnlProxySettingsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(pnlProxySettingsLayout.createSequentialGroup()
+ .add(pnlProxy, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addContainerGap())
);
org.jdesktop.layout.GroupLayout tabConnectionLayout = new org.jdesktop.layout.GroupLayout(tabConnection);
tabConnection.setLayout(tabConnectionLayout);
tabConnectionLayout.setHorizontalGroup(
- tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(org.jdesktop.layout.GroupLayout.TRAILING, tabConnectionLayout.createSequentialGroup()
- .addContainerGap()
- .add(tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(pnlProxySettings, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(org.jdesktop.layout.GroupLayout.LEADING, tabConnectionLayout.createSequentialGroup()
- .add(lblProxyType)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(cbProxyType, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 126, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .add(connection_servers, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addContainerGap())
+ tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(org.jdesktop.layout.GroupLayout.TRAILING, tabConnectionLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(pnlProxySettings, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(org.jdesktop.layout.GroupLayout.LEADING, tabConnectionLayout.createSequentialGroup()
+ .add(lblProxyType)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(cbProxyType, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 126, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .add(connection_servers, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addContainerGap())
);
tabConnectionLayout.setVerticalGroup(
- tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabConnectionLayout.createSequentialGroup()
- .addContainerGap()
- .add(connection_servers, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(lblProxyType)
- .add(cbProxyType, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .add(18, 18, 18)
- .add(pnlProxySettings, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabConnectionLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(connection_servers, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(tabConnectionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(lblProxyType)
+ .add(cbProxyType, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .add(18, 18, 18)
+ .add(pnlProxySettings, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pnlProxySettings.getAccessibleContext().setAccessibleDescription("");
@@ -2591,94 +2592,94 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout tabControlsLayout = new org.jdesktop.layout.GroupLayout(tabControls);
tabControls.setLayout(tabControlsLayout);
tabControlsLayout.setHorizontalGroup(
- tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabControlsLayout.createSequentialGroup()
- .addContainerGap()
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
- .add(bttnResetControls, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(tabControlsLayout.createSequentialGroup()
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(labelCancel)
- .add(labelNextTurn)
- .add(labelEndStep)
- .add(labelMainStep)
- .add(labelYourTurn)
- .add(lebelSkip)
- .add(labelPriorEnd)
- .add(labelSkipStep)
- .add(labelConfirm)
- .add(labelToggleRecordMacro)
- .add(labelSwitchChat))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(keyConfirm, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(keyCancelSkip, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(keyNextTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(keySkipStack, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(keyYourTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(keyMainStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(keyPriorEnd, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(keySkipStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(keyEndStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(keyToggleRecordMacro, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(keySwitchChat, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(controlsDescriptionLabel)
- .addContainerGap())
+ tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabControlsLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
+ .add(bttnResetControls, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(tabControlsLayout.createSequentialGroup()
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(labelCancel)
+ .add(labelNextTurn)
+ .add(labelEndStep)
+ .add(labelMainStep)
+ .add(labelYourTurn)
+ .add(lebelSkip)
+ .add(labelPriorEnd)
+ .add(labelSkipStep)
+ .add(labelConfirm)
+ .add(labelToggleRecordMacro)
+ .add(labelSwitchChat))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(keyConfirm, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(keyCancelSkip, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(keyNextTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(keySkipStack, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(keyYourTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(keyMainStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(keyPriorEnd, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(keySkipStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(keyEndStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(keyToggleRecordMacro, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(keySwitchChat, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(controlsDescriptionLabel)
+ .addContainerGap())
);
tabControlsLayout.setVerticalGroup(
- tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabControlsLayout.createSequentialGroup()
- .addContainerGap()
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
- .add(tabControlsLayout.createSequentialGroup()
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(labelConfirm)
- .add(keyConfirm, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(labelCancel)
- .add(keyCancelSkip, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(labelNextTurn)
- .add(keyNextTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(labelEndStep)
- .add(keyEndStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(labelSkipStep)
- .add(keySkipStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(labelMainStep)
- .add(keyMainStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(labelYourTurn)
- .add(keyYourTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(lebelSkip)
- .add(keySkipStack, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(labelPriorEnd)
- .add(keyPriorEnd, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(labelToggleRecordMacro)
- .add(keyToggleRecordMacro, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(labelSwitchChat)
- .add(keySwitchChat, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
- .add(bttnResetControls))
- .add(controlsDescriptionLabel))
- .addContainerGap())
+ tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabControlsLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
+ .add(tabControlsLayout.createSequentialGroup()
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(labelConfirm)
+ .add(keyConfirm, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(labelCancel)
+ .add(keyCancelSkip, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(labelNextTurn)
+ .add(keyNextTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(labelEndStep)
+ .add(keyEndStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(labelSkipStep)
+ .add(keySkipStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(labelMainStep)
+ .add(keyMainStep, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(labelYourTurn)
+ .add(keyYourTurn, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(lebelSkip)
+ .add(keySkipStack, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(labelPriorEnd)
+ .add(keyPriorEnd, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(labelToggleRecordMacro)
+ .add(keyToggleRecordMacro, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(tabControlsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(labelSwitchChat)
+ .add(keySwitchChat, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
+ .add(bttnResetControls))
+ .add(controlsDescriptionLabel))
+ .addContainerGap())
);
tabsPanel.addTab("Controls", tabControls);
@@ -2703,46 +2704,46 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout themesCategoryLayout = new org.jdesktop.layout.GroupLayout(themesCategory);
themesCategory.setLayout(themesCategoryLayout);
themesCategoryLayout.setHorizontalGroup(
- themesCategoryLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(themesCategoryLayout.createSequentialGroup()
- .addContainerGap()
- .add(lbSelectLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 96, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(themesCategoryLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(lbThemeHint)
- .add(cbTheme, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 303, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addContainerGap(303, Short.MAX_VALUE))
+ themesCategoryLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(themesCategoryLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(lbSelectLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 96, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(themesCategoryLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(lbThemeHint)
+ .add(cbTheme, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 303, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addContainerGap(303, Short.MAX_VALUE))
);
themesCategoryLayout.setVerticalGroup(
- themesCategoryLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(themesCategoryLayout.createSequentialGroup()
- .add(themesCategoryLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(cbTheme, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(lbSelectLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 22, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(lbThemeHint)
- .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ themesCategoryLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(themesCategoryLayout.createSequentialGroup()
+ .add(themesCategoryLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(cbTheme, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(lbSelectLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 22, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(lbThemeHint)
+ .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
org.jdesktop.layout.GroupLayout tabThemesLayout = new org.jdesktop.layout.GroupLayout(tabThemes);
tabThemes.setLayout(tabThemesLayout);
tabThemesLayout.setHorizontalGroup(
- tabThemesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 750, Short.MAX_VALUE)
- .add(tabThemesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabThemesLayout.createSequentialGroup()
- .addContainerGap()
- .add(themesCategory, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addContainerGap()))
+ tabThemesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 750, Short.MAX_VALUE)
+ .add(tabThemesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabThemesLayout.createSequentialGroup()
+ .addContainerGap()
+ .add(themesCategory, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addContainerGap()))
);
tabThemesLayout.setVerticalGroup(
- tabThemesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(0, 526, Short.MAX_VALUE)
- .add(tabThemesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(tabThemesLayout.createSequentialGroup()
- .add(21, 21, 21)
- .add(themesCategory, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addContainerGap(430, Short.MAX_VALUE)))
+ tabThemesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(0, 526, Short.MAX_VALUE)
+ .add(tabThemesLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(tabThemesLayout.createSequentialGroup()
+ .add(21, 21, 21)
+ .add(themesCategory, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap(430, Short.MAX_VALUE)))
);
tabsPanel.addTab("Themes", tabThemes);
@@ -2772,27 +2773,27 @@ public class PreferencesDialog extends javax.swing.JDialog {
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
- layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(layout.createSequentialGroup()
- .addContainerGap()
- .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
- .add(org.jdesktop.layout.GroupLayout.LEADING, tabsPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(layout.createSequentialGroup()
- .add(0, 0, Short.MAX_VALUE)
- .add(saveButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
- .add(exitButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
- .add(6, 6, 6))
+ layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(layout.createSequentialGroup()
+ .addContainerGap()
+ .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
+ .add(org.jdesktop.layout.GroupLayout.LEADING, tabsPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(layout.createSequentialGroup()
+ .add(0, 0, Short.MAX_VALUE)
+ .add(saveButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
+ .add(exitButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
+ .add(6, 6, 6))
);
layout.setVerticalGroup(
- layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
- .add(layout.createSequentialGroup()
- .add(tabsPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 554, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
- .add(saveButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
- .add(exitButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
- .addContainerGap())
+ layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
+ .add(layout.createSequentialGroup()
+ .add(tabsPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 554, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
+ .add(saveButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
+ .add(exitButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
+ .addContainerGap())
);
pack();
diff --git a/Mage.Sets/src/mage/cards/a/AlpineHoundmaster.java b/Mage.Sets/src/mage/cards/a/AlpineHoundmaster.java
index adbd5c2f3a5..5bf4ad432d2 100644
--- a/Mage.Sets/src/mage/cards/a/AlpineHoundmaster.java
+++ b/Mage.Sets/src/mage/cards/a/AlpineHoundmaster.java
@@ -29,13 +29,13 @@ import java.util.UUID;
*/
public final class AlpineHoundmaster extends CardImpl {
- private static final FilterPermanent filter = new FilterAttackingCreature();
+ private static final FilterPermanent filter = new FilterAttackingCreature("the number of other attacking creatures");
static {
filter.add(AnotherPredicate.instance);
}
- private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
+ private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter, null);
public AlpineHoundmaster(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{W}");
@@ -50,8 +50,8 @@ public final class AlpineHoundmaster extends CardImpl {
// Whenever Alpine Houndmaster attacks, it gets +X/+0 until end of turn, where X is the number of other attacking creatures.
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(
- xValue, StaticValue.get(0), Duration.EndOfTurn
- ), false, "it gets +X/+0 until end of turn, where X is the number of other attacking creatures"));
+ xValue, StaticValue.get(0), Duration.EndOfTurn, true
+ ), false));
}
private AlpineHoundmaster(final AlpineHoundmaster card) {
diff --git a/Mage.Sets/src/mage/cards/a/AnimarSoulOfElements.java b/Mage.Sets/src/mage/cards/a/AnimarSoulOfElements.java
index 1ac2052194d..9a655149599 100644
--- a/Mage.Sets/src/mage/cards/a/AnimarSoulOfElements.java
+++ b/Mage.Sets/src/mage/cards/a/AnimarSoulOfElements.java
@@ -1,5 +1,6 @@
package mage.cards.a;
+import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability;
@@ -19,8 +20,6 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.util.CardUtil;
-import java.util.UUID;
-
/**
* @author LevelX2
*/
@@ -82,9 +81,12 @@ class AnimarCostReductionEffect extends CostModificationEffectImpl {
public boolean applies(Ability abilityToModify, Ability source, Game game) {
if (abilityToModify instanceof SpellAbility) {
if (abilityToModify.isControlledBy(source.getControllerId())) {
- Card card = ((SpellAbility) abilityToModify).getCharacteristics(game);
- if (card != null) {
- return card.isCreature();
+ Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game);
+ if (spellCard != null) {
+ if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) {
+ spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game);
+ }
+ return spellCard.isCreature();
}
}
}
diff --git a/Mage.Sets/src/mage/cards/a/ArdentRecruit.java b/Mage.Sets/src/mage/cards/a/ArdentRecruit.java
index 7759f1aa3c1..a3637c55e6d 100644
--- a/Mage.Sets/src/mage/cards/a/ArdentRecruit.java
+++ b/Mage.Sets/src/mage/cards/a/ArdentRecruit.java
@@ -1,7 +1,5 @@
-
package mage.cards.a;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
@@ -9,10 +7,13 @@ import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
+import java.util.UUID;
+
/**
* @author Loki
*/
@@ -32,6 +33,7 @@ public final class ArdentRecruit extends CardImpl {
"{this} gets +2/+2 as long as you control three or more artifacts");
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
ability.setAbilityWord(AbilityWord.METALCRAFT);
+ ability.addHint(MetalcraftHint.instance);
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/a/ArgentSphinx.java b/Mage.Sets/src/mage/cards/a/ArgentSphinx.java
index 7f76777b23d..cef72466597 100644
--- a/Mage.Sets/src/mage/cards/a/ArgentSphinx.java
+++ b/Mage.Sets/src/mage/cards/a/ArgentSphinx.java
@@ -1,7 +1,5 @@
-
package mage.cards.a;
-import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
@@ -12,6 +10,7 @@ import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -20,8 +19,9 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget;
+import java.util.UUID;
+
/**
- *
* @author Loki
*/
public final class ArgentSphinx extends CardImpl {
@@ -39,6 +39,7 @@ public final class ArgentSphinx extends CardImpl {
// Metalcraft — {U}: Exile Argent Sphinx. Return it to the battlefield under your control at the beginning of the next end step. Activate this ability only if you control three or more artifacts.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new ArgentSphinxEffect(), new ManaCostsImpl("{U}"), MetalcraftCondition.instance);
ability.setAbilityWord(AbilityWord.METALCRAFT);
+ ability.addHint(MetalcraftHint.instance);
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/a/AshiokNightmareMuse.java b/Mage.Sets/src/mage/cards/a/AshiokNightmareMuse.java
index fef376a7693..e1ee8dde9eb 100644
--- a/Mage.Sets/src/mage/cards/a/AshiokNightmareMuse.java
+++ b/Mage.Sets/src/mage/cards/a/AshiokNightmareMuse.java
@@ -1,10 +1,13 @@
package mage.cards.a;
+import java.util.UUID;
+import mage.MageObjectReference;
import mage.abilities.Ability;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
+import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
@@ -17,11 +20,6 @@ import mage.target.common.TargetCardInExile;
import mage.target.common.TargetCardInHand;
import mage.target.common.TargetNonlandPermanent;
-import java.util.UUID;
-
-import mage.MageObjectReference;
-import mage.cards.Card;
-
/**
* @author TheElk801
*/
@@ -42,7 +40,7 @@ public final class AshiokNightmareMuse extends CardImpl {
ability.addTarget(new TargetNonlandPermanent());
this.addAbility(ability);
- // −7: You may cast up to three face-up cards your opponents own from exile without paying their mana costs.
+ // −7: You may cast up to three spells from among face-up cards your opponents own from exile without paying their mana costs.
this.addAbility(new LoyaltyAbility(new AshiokNightmareMuseCastEffect(), -7));
}
@@ -102,7 +100,7 @@ class AshiokNightmareMuseCastEffect extends OneShotEffect {
AshiokNightmareMuseCastEffect() {
super(Outcome.Discard);
- staticText = "You may cast up to three face-up cards your opponents own from exile without paying their mana costs.";
+ staticText = "You may cast up to three spells from among face-up cards your opponents own from exile without paying their mana costs.";
}
private AshiokNightmareMuseCastEffect(final AshiokNightmareMuseCastEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/a/AuriokEdgewright.java b/Mage.Sets/src/mage/cards/a/AuriokEdgewright.java
index a38161a38a5..4d03eb2490c 100644
--- a/Mage.Sets/src/mage/cards/a/AuriokEdgewright.java
+++ b/Mage.Sets/src/mage/cards/a/AuriokEdgewright.java
@@ -1,23 +1,20 @@
-
package mage.cards.a;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.DoubleStrikeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.SubType;
-import mage.constants.Zone;
+import mage.constants.*;
+
+import java.util.UUID;
/**
- *
* @author maurer.it_at_gmail.com
*/
public final class AuriokEdgewright extends CardImpl {
@@ -25,7 +22,7 @@ public final class AuriokEdgewright extends CardImpl {
protected static String effectText = "Metalcraft — Auriok Edgewright has double strike as long as you control three or more artifacts.";
public AuriokEdgewright(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{W}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SOLDIER);
@@ -33,7 +30,12 @@ public final class AuriokEdgewright extends CardImpl {
this.toughness = new MageInt(2);
ContinuousEffect effect = new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance(), Duration.WhileOnBattlefield);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect, MetalcraftCondition.instance, effectText)));
+ this.addAbility(new SimpleStaticAbility(
+ Zone.BATTLEFIELD,
+ new ConditionalContinuousEffect(effect, MetalcraftCondition.instance, effectText))
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance)
+ );
}
public AuriokEdgewright(final AuriokEdgewright card) {
diff --git a/Mage.Sets/src/mage/cards/a/AuriokSunchaser.java b/Mage.Sets/src/mage/cards/a/AuriokSunchaser.java
index 249c912b492..59ce1fcd791 100644
--- a/Mage.Sets/src/mage/cards/a/AuriokSunchaser.java
+++ b/Mage.Sets/src/mage/cards/a/AuriokSunchaser.java
@@ -1,7 +1,5 @@
-
package mage.cards.a;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MetalcraftCondition;
@@ -9,16 +7,15 @@ import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.SubType;
-import mage.constants.Zone;
+import mage.constants.*;
+
+import java.util.UUID;
/**
- *
* @author maurer.it_at_gmail.com
*/
public final class AuriokSunchaser extends CardImpl {
@@ -27,7 +24,7 @@ public final class AuriokSunchaser extends CardImpl {
protected static String effect2Text = "Metalcraft — As long as you control three or more artifacts, Auriok Sunchaser has flying";
public AuriokSunchaser(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SOLDIER);
@@ -35,9 +32,18 @@ public final class AuriokSunchaser extends CardImpl {
this.toughness = new MageInt(1);
ContinuousEffect effect1 = new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect1, MetalcraftCondition.instance, effect1Text)));
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
+ new ConditionalContinuousEffect(effect1, MetalcraftCondition.instance, effect1Text))
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance)
+ );
+
ContinuousEffect effect2 = new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect2, MetalcraftCondition.instance, effect2Text)));
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
+ new ConditionalContinuousEffect(effect2, MetalcraftCondition.instance, effect2Text))
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance)
+ );
}
public AuriokSunchaser(final AuriokSunchaser card) {
diff --git a/Mage.Sets/src/mage/cards/b/BladeTribeBerserkers.java b/Mage.Sets/src/mage/cards/b/BladeTribeBerserkers.java
index 53de13427a4..f35ba8ab4c6 100644
--- a/Mage.Sets/src/mage/cards/b/BladeTribeBerserkers.java
+++ b/Mage.Sets/src/mage/cards/b/BladeTribeBerserkers.java
@@ -1,7 +1,5 @@
-
package mage.cards.b;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.TriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -9,15 +7,18 @@ import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
+import java.util.UUID;
+
/**
- *
* @author North
*/
public final class BladeTribeBerserkers extends CardImpl {
@@ -25,7 +26,7 @@ public final class BladeTribeBerserkers extends CardImpl {
private static final String effectText = "Metalcraft — When Blade-Tribe Berserkers enters the battlefield, if you control three or more artifacts, Blade-Tribe Berserkers gets +3/+3 and gains haste until end of turn.";
public BladeTribeBerserkers(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
this.subtype.add(SubType.HUMAN, SubType.BERSERKER);
this.power = new MageInt(3);
@@ -34,7 +35,10 @@ public final class BladeTribeBerserkers extends CardImpl {
//Metalcraft — When Blade-Tribe Berserkers enters the battlefield, if you control three or more artifacts, Blade-Tribe Berserkers gets +3/+3 and gains haste until end of turn.
TriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new BoostSourceEffect(3, 3, Duration.EndOfTurn), false);
ability.addEffect(new GainAbilitySourceEffect(HasteAbility.getInstance(), Duration.EndOfTurn));
- this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, MetalcraftCondition.instance, effectText));
+ this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, MetalcraftCondition.instance, effectText)
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance)
+ );
}
public BladeTribeBerserkers(final BladeTribeBerserkers card) {
diff --git a/Mage.Sets/src/mage/cards/b/BleakCovenVampires.java b/Mage.Sets/src/mage/cards/b/BleakCovenVampires.java
index 61ec1d16679..181f01c1286 100644
--- a/Mage.Sets/src/mage/cards/b/BleakCovenVampires.java
+++ b/Mage.Sets/src/mage/cards/b/BleakCovenVampires.java
@@ -1,7 +1,5 @@
-
package mage.cards.b;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.TriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -9,15 +7,18 @@ import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.target.Target;
import mage.target.TargetPlayer;
+import java.util.UUID;
+
/**
- *
* @author North
*/
public final class BleakCovenVampires extends CardImpl {
@@ -25,7 +26,7 @@ public final class BleakCovenVampires extends CardImpl {
private static final String effectText = "Metalcraft — When Bleak Coven Vampires enters the battlefield, if you control three or more artifacts, target player loses 4 life and you gain 4 life.";
public BleakCovenVampires(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}{B}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}");
this.subtype.add(SubType.VAMPIRE, SubType.WARRIOR);
this.power = new MageInt(4);
@@ -37,7 +38,10 @@ public final class BleakCovenVampires extends CardImpl {
Target target = new TargetPlayer();
ability.addTarget(target);
- this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, MetalcraftCondition.instance, effectText));
+ this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, MetalcraftCondition.instance, effectText)
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance)
+ );
}
public BleakCovenVampires(final BleakCovenVampires card) {
diff --git a/Mage.Sets/src/mage/cards/c/CarapaceForger.java b/Mage.Sets/src/mage/cards/c/CarapaceForger.java
index 01d92bba753..1e8735e3063 100644
--- a/Mage.Sets/src/mage/cards/c/CarapaceForger.java
+++ b/Mage.Sets/src/mage/cards/c/CarapaceForger.java
@@ -1,5 +1,3 @@
-
-
package mage.cards.c;
import mage.MageInt;
@@ -7,12 +5,10 @@ import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.SubType;
-import mage.constants.Zone;
+import mage.constants.*;
import java.util.UUID;
@@ -35,8 +31,9 @@ public final class CarapaceForger extends CardImpl {
new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield),
MetalcraftCondition.instance, "Metalcraft — {this} gets " +
"+2/+2 as long as you control three or more artifacts"
- )
- ));
+ ))
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance));
}
public CarapaceForger(final CarapaceForger card) {
diff --git a/Mage.Sets/src/mage/cards/c/ChromeSteed.java b/Mage.Sets/src/mage/cards/c/ChromeSteed.java
index 87b468f3c26..6a7f3aa3b33 100644
--- a/Mage.Sets/src/mage/cards/c/ChromeSteed.java
+++ b/Mage.Sets/src/mage/cards/c/ChromeSteed.java
@@ -1,5 +1,3 @@
-
-
package mage.cards.c;
import mage.MageInt;
@@ -7,12 +5,10 @@ import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Duration;
-import mage.constants.SubType;
-import mage.constants.Zone;
+import mage.constants.*;
import java.util.UUID;
@@ -33,8 +29,9 @@ public final class ChromeSteed extends CardImpl {
new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield),
MetalcraftCondition.instance, "Metalcraft — {this} gets " +
"+2/+2 as long as you control three or more artifacts"
- )
- ));
+ ))
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance));
}
public ChromeSteed(final ChromeSteed card) {
diff --git a/Mage.Sets/src/mage/cards/c/ConcussiveBolt.java b/Mage.Sets/src/mage/cards/c/ConcussiveBolt.java
index 23c5c0e79d4..7233e549a07 100644
--- a/Mage.Sets/src/mage/cards/c/ConcussiveBolt.java
+++ b/Mage.Sets/src/mage/cards/c/ConcussiveBolt.java
@@ -5,8 +5,10 @@ import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.RestrictionEffect;
import mage.abilities.effects.common.DamageTargetEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
@@ -28,9 +30,12 @@ public final class ConcussiveBolt extends CardImpl {
// Concussive Bolt deals 4 damage to target player.
this.getSpellAbility().addTarget(new TargetPlayerOrPlaneswalker());
this.getSpellAbility().addEffect(new DamageTargetEffect(4));
+
// Metalcraft — If you control three or more artifacts, creatures that player controls can't block this turn.
this.getSpellAbility().addEffect(new ConcussiveBoltEffect());
this.getSpellAbility().addEffect(new ConcussiveBoltRestrictionEffect());
+ this.getSpellAbility().setAbilityWord(AbilityWord.METALCRAFT);
+ this.getSpellAbility().addHint(MetalcraftHint.instance);
}
public ConcussiveBolt(final ConcussiveBolt card) {
diff --git a/Mage.Sets/src/mage/cards/d/Dispatch.java b/Mage.Sets/src/mage/cards/d/Dispatch.java
index 6fd5815ce9e..5ecd0f6348b 100644
--- a/Mage.Sets/src/mage/cards/d/Dispatch.java
+++ b/Mage.Sets/src/mage/cards/d/Dispatch.java
@@ -1,32 +1,37 @@
-
-
package mage.cards.d;
-import java.util.UUID;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.ExileTargetEffect;
import mage.abilities.effects.common.TapTargetEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author Loki
*/
public final class Dispatch extends CardImpl {
- public Dispatch (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{W}");
+ public Dispatch(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{W}");
+ // Tap target creature.
this.getSpellAbility().addEffect(new TapTargetEffect());
+
+ // Metalcraft — If you control three or more artifacts, exile that creature.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new ExileTargetEffect(), MetalcraftCondition.instance, "Metalcraft — If you control three or more artifacts, exile that creature"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
+ this.getSpellAbility().setAbilityWord(AbilityWord.METALCRAFT);
+ this.getSpellAbility().addHint(MetalcraftHint.instance);
}
- public Dispatch (final Dispatch card) {
+ public Dispatch(final Dispatch card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/d/DispenseJustice.java b/Mage.Sets/src/mage/cards/d/DispenseJustice.java
index 98da9261938..fbafe605737 100644
--- a/Mage.Sets/src/mage/cards/d/DispenseJustice.java
+++ b/Mage.Sets/src/mage/cards/d/DispenseJustice.java
@@ -1,35 +1,38 @@
-
-
package mage.cards.d;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.SacrificeEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.filter.common.FilterAttackingCreature;
import mage.game.Game;
import mage.target.TargetPlayer;
+import java.util.UUID;
+
/**
- *
* @author maurer.it_at_gmail.com
*/
public final class DispenseJustice extends CardImpl {
- public DispenseJustice (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{W}");
-
+ public DispenseJustice(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{W}");
+ // Target player sacrifices an attacking creature.
+ // Metalcraft — That player sacrifices two attacking creatures instead if you control three or more artifacts.
this.getSpellAbility().addEffect(new DispenseJusticeEffect());
this.getSpellAbility().addTarget(new TargetPlayer());
+ this.getSpellAbility().setAbilityWord(AbilityWord.METALCRAFT);
+ this.getSpellAbility().addHint(MetalcraftHint.instance);
}
- public DispenseJustice (final DispenseJustice card) {
+ public DispenseJustice(final DispenseJustice card) {
super(card);
}
@@ -47,21 +50,20 @@ class DispenseJusticeEffect extends OneShotEffect {
private static final FilterAttackingCreature filter = new FilterAttackingCreature();
- DispenseJusticeEffect ( ) {
+ DispenseJusticeEffect() {
super(Outcome.Sacrifice);
staticText = effectText;
}
- DispenseJusticeEffect ( DispenseJusticeEffect effect ) {
+ DispenseJusticeEffect(DispenseJusticeEffect effect) {
super(effect);
}
@Override
public boolean apply(Game game, Ability source) {
- if ( MetalcraftCondition.instance.apply(game, source) ) {
+ if (MetalcraftCondition.instance.apply(game, source)) {
return new SacrificeEffect(filter, 2, effectText).apply(game, source);
- }
- else {
+ } else {
return new SacrificeEffect(filter, 1, effectText).apply(game, source);
}
}
diff --git a/Mage.Sets/src/mage/cards/d/DreamChisel.java b/Mage.Sets/src/mage/cards/d/DreamChisel.java
index 8508e9b24bf..22503b4d2ac 100644
--- a/Mage.Sets/src/mage/cards/d/DreamChisel.java
+++ b/Mage.Sets/src/mage/cards/d/DreamChisel.java
@@ -1,7 +1,5 @@
-
package mage.cards.d;
-import java.util.UUID;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
@@ -9,10 +7,11 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard;
-import mage.filter.predicate.other.FaceDownPredicate;
+import mage.filter.predicate.other.FaceDownCastablePredicate;
+
+import java.util.UUID;
/**
- *
* @author North
*/
public final class DreamChisel extends CardImpl {
@@ -20,11 +19,11 @@ public final class DreamChisel extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("Face-down creature spells");
static {
- filter.add(FaceDownPredicate.instance);
+ filter.add(FaceDownCastablePredicate.instance);
}
public DreamChisel(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
// Face-down creature spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
diff --git a/Mage.Sets/src/mage/cards/d/Drought.java b/Mage.Sets/src/mage/cards/d/Drought.java
index 201ab8d18d4..090b0501913 100644
--- a/Mage.Sets/src/mage/cards/d/Drought.java
+++ b/Mage.Sets/src/mage/cards/d/Drought.java
@@ -1,4 +1,3 @@
-
package mage.cards.d;
import java.util.UUID;
@@ -11,12 +10,12 @@ import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.AbilityType;
+import mage.constants.CardType;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.constants.Outcome;
+import mage.constants.SubType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
@@ -54,9 +53,10 @@ public final class Drought extends CardImpl {
class DroughtAdditionalCostEffect extends CostModificationEffectImpl {
- private boolean appliesToSpells;
+ private final boolean appliesToSpells;
private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Swamp");
- static{
+
+ static {
filter.add(SubType.SWAMP.getPredicate());
}
diff --git a/Mage.Sets/src/mage/cards/e/ElspethConquersDeath.java b/Mage.Sets/src/mage/cards/e/ElspethConquersDeath.java
index 0dbe61b9b80..117721c4f48 100644
--- a/Mage.Sets/src/mage/cards/e/ElspethConquersDeath.java
+++ b/Mage.Sets/src/mage/cards/e/ElspethConquersDeath.java
@@ -1,5 +1,6 @@
package mage.cards.e;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SagaAbility;
@@ -23,8 +24,6 @@ import mage.target.TargetPermanent;
import mage.target.common.TargetCardInYourGraveyard;
import mage.util.CardUtil;
-import java.util.UUID;
-
/**
* @author TheElk801
*/
@@ -99,12 +98,17 @@ class ElspethConquersDeathCostEffect extends CostModificationEffectImpl {
@Override
public boolean applies(Ability abilityToModify, Ability source, Game game) {
- if (!(abilityToModify instanceof SpellAbility) ||
- !game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) {
- return false;
+ if ((abilityToModify instanceof SpellAbility)
+ && game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) {
+ Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game);
+ if (spellCard != null) {
+ if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) {
+ spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game);
+ }
+ return !spellCard.isCreature();
+ }
}
- Card card = game.getCard(abilityToModify.getSourceId());
- return card != null && !card.isCreature();
+ return false;
}
@Override
@@ -117,8 +121,8 @@ class ElspethConquersDeathReturnEffect extends OneShotEffect {
ElspethConquersDeathReturnEffect() {
super(Outcome.Benefit);
- staticText = "Return target creature or planeswalker card from your graveyard to the battlefield. " +
- "Put a +1/+1 counter or a loyalty counter on it";
+ staticText = "Return target creature or planeswalker card from your graveyard to the battlefield. "
+ + "Put a +1/+1 counter or a loyalty counter on it";
}
private ElspethConquersDeathReturnEffect(final ElspethConquersDeathReturnEffect effect) {
@@ -149,4 +153,5 @@ class ElspethConquersDeathReturnEffect extends OneShotEffect {
permanent.addCounters(counter, source, game);
return true;
}
-}
\ No newline at end of file
+
+}
diff --git a/Mage.Sets/src/mage/cards/e/EtchedChampion.java b/Mage.Sets/src/mage/cards/e/EtchedChampion.java
index a4fd2efd098..11aa9777da0 100644
--- a/Mage.Sets/src/mage/cards/e/EtchedChampion.java
+++ b/Mage.Sets/src/mage/cards/e/EtchedChampion.java
@@ -1,7 +1,5 @@
-
package mage.cards.e;
-import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.SimpleStaticAbility;
@@ -9,19 +7,18 @@ import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.ProtectionAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.Duration;
-import mage.constants.Zone;
+import mage.constants.*;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
+import java.util.UUID;
+
/**
- *
* @author North
*/
public final class EtchedChampion extends CardImpl {
@@ -39,14 +36,19 @@ public final class EtchedChampion extends CardImpl {
}
public EtchedChampion(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{3}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}");
this.subtype.add(SubType.SOLDIER);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
+ // Metalcraft — Etched Champion has protection from all colors as long as you control three or more artifacts.
ContinuousEffect effect = new GainAbilitySourceEffect(new ProtectionAbility(filter), Duration.WhileOnBattlefield);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect, MetalcraftCondition.instance, ruleText)));
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
+ new ConditionalContinuousEffect(effect, MetalcraftCondition.instance, ruleText))
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance)
+ );
}
public EtchedChampion(final EtchedChampion card) {
diff --git a/Mage.Sets/src/mage/cards/e/EyeOfRamos.java b/Mage.Sets/src/mage/cards/e/EyeOfRamos.java
index 54a2e54f42d..e0f56cada84 100644
--- a/Mage.Sets/src/mage/cards/e/EyeOfRamos.java
+++ b/Mage.Sets/src/mage/cards/e/EyeOfRamos.java
@@ -1,4 +1,3 @@
-
package mage.cards.e;
import java.util.UUID;
@@ -18,11 +17,11 @@ import mage.constants.Zone;
public final class EyeOfRamos extends CardImpl {
public EyeOfRamos(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
- // {tap}: Add {U}.
+ // {T}: Add {U}.
this.addAbility(new BlueManaAbility());
-
+
// Sacrifice Eye of Ramos: Add {U}.
this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlueMana(1), new SacrificeSourceCost()));
}
diff --git a/Mage.Sets/src/mage/cards/e/EzurisBrigade.java b/Mage.Sets/src/mage/cards/e/EzurisBrigade.java
index 28bd5cf3748..3d130cd6e20 100644
--- a/Mage.Sets/src/mage/cards/e/EzurisBrigade.java
+++ b/Mage.Sets/src/mage/cards/e/EzurisBrigade.java
@@ -1,8 +1,5 @@
-
-
package mage.cards.e;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
@@ -11,36 +8,38 @@ import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.Duration;
-import mage.constants.Zone;
+import mage.constants.*;
+
+import java.util.UUID;
/**
- *
* @author Loki
*/
public final class EzurisBrigade extends CardImpl {
private static final String rule = "Metalcraft — As long as you control three or more artifacts, Ezuri's Brigade gets +4/+4 and has trample";
- public EzurisBrigade (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{G}");
+ public EzurisBrigade(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}");
this.subtype.add(SubType.ELF);
this.subtype.add(SubType.WARRIOR);
-
this.power = new MageInt(4);
this.toughness = new MageInt(4);
+
+ // Metalcraft — As long as you control three or more artifacts, Ezuri’s Brigade gets +4/+4 and has trample.
ContinuousEffect boostSource = new BoostSourceEffect(4, 4, Duration.WhileOnBattlefield);
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(boostSource, MetalcraftCondition.instance, rule);
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect);
ability.addEffect(new ConditionalContinuousEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield), MetalcraftCondition.instance, ""));
+ ability.setAbilityWord(AbilityWord.METALCRAFT);
+ ability.addHint(MetalcraftHint.instance);
this.addAbility(ability);
}
- public EzurisBrigade (final EzurisBrigade card) {
+ public EzurisBrigade(final EzurisBrigade card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/g/GalvanicBlast.java b/Mage.Sets/src/mage/cards/g/GalvanicBlast.java
index 5c49d145473..bf7146663b2 100644
--- a/Mage.Sets/src/mage/cards/g/GalvanicBlast.java
+++ b/Mage.Sets/src/mage/cards/g/GalvanicBlast.java
@@ -3,8 +3,10 @@ package mage.cards.g;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.DamageTargetEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.target.common.TargetAnyTarget;
@@ -29,6 +31,8 @@ public final class GalvanicBlast extends CardImpl {
MetalcraftCondition.instance, effectText
));
this.getSpellAbility().addTarget(new TargetAnyTarget());
+ this.getSpellAbility().setAbilityWord(AbilityWord.METALCRAFT);
+ this.getSpellAbility().addHint(MetalcraftHint.instance);
}
public GalvanicBlast(final GalvanicBlast card) {
diff --git a/Mage.Sets/src/mage/cards/g/GhalmasWarden.java b/Mage.Sets/src/mage/cards/g/GhalmasWarden.java
index a371efbecb3..188e926cdfc 100644
--- a/Mage.Sets/src/mage/cards/g/GhalmasWarden.java
+++ b/Mage.Sets/src/mage/cards/g/GhalmasWarden.java
@@ -1,42 +1,42 @@
-
-
package mage.cards.g;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.Duration;
-import mage.constants.Zone;
+import mage.constants.*;
+
+import java.util.UUID;
/**
- *
* @author Loki
*/
public final class GhalmasWarden extends CardImpl {
private static final String rule = "Metalcraft — Ghalma's Warden gets +2/+2 as long as you control three or more artifacts";
- public GhalmasWarden (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}");
+ public GhalmasWarden(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}");
this.subtype.add(SubType.ELEPHANT);
this.subtype.add(SubType.SOLDIER);
-
this.power = new MageInt(2);
this.toughness = new MageInt(4);
+
+ // Metalcraft — Ghalma’s Warden gets +2/+2 as long as you control three or more artifacts.
ContinuousEffect boostSource = new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield);
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(boostSource, MetalcraftCondition.instance, rule);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance)
+ );
}
- public GhalmasWarden (final GhalmasWarden card) {
+ public GhalmasWarden(final GhalmasWarden card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/g/GrandArchitect.java b/Mage.Sets/src/mage/cards/g/GrandArchitect.java
index a864996b17c..c7b26b830d8 100644
--- a/Mage.Sets/src/mage/cards/g/GrandArchitect.java
+++ b/Mage.Sets/src/mage/cards/g/GrandArchitect.java
@@ -1,7 +1,5 @@
package mage.cards.g;
-import java.util.ArrayList;
-import java.util.List;
import mage.*;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
@@ -124,21 +122,6 @@ class GrandArchitectManaAbility extends ActivatedManaAbilityImpl {
this.filter = ability.filter.copy();
}
- @Override
- public List getNetMana(Game game) {
- if (game != null && game.inCheckPlayableState()) {
- int count = game.getBattlefield().count(filter, getSourceId(), getControllerId(), game);
- List netMana = new ArrayList<>();
- if (count > 0) {
- ConditionalMana mana = new GrandArchitectConditionalMana();
- mana.setColorless(count * 2);
- netMana.add(mana);
- }
- return netMana;
- }
- return super.getNetMana(game);
- }
-
@Override
public GrandArchitectManaAbility copy() {
return new GrandArchitectManaAbility(this);
diff --git a/Mage.Sets/src/mage/cards/h/HamletbackGoliath.java b/Mage.Sets/src/mage/cards/h/HamletbackGoliath.java
index 0c8df316781..7e868438adf 100644
--- a/Mage.Sets/src/mage/cards/h/HamletbackGoliath.java
+++ b/Mage.Sets/src/mage/cards/h/HamletbackGoliath.java
@@ -1,7 +1,5 @@
-
package mage.cards.h;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
@@ -10,8 +8,8 @@ import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.Outcome;
+import mage.constants.SubType;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.game.Game;
@@ -20,14 +18,15 @@ import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget;
+import java.util.UUID;
+
/**
- *
* @author jeffwadsworth
*/
public final class HamletbackGoliath extends CardImpl {
public HamletbackGoliath(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{R}");
this.subtype.add(SubType.GIANT);
this.subtype.add(SubType.WARRIOR);
@@ -72,7 +71,7 @@ class HamletbackGoliathTriggeredAbility extends TriggeredAbilityImpl {
public boolean checkTrigger(GameEvent event, Game game) {
UUID targetId = event.getTargetId();
Permanent permanent = game.getPermanent(targetId);
- if (permanent.isCreature()
+ if (permanent != null && permanent.isCreature()
&& !(targetId.equals(this.getSourceId()))) {
for (Effect effect : this.getEffects()) {
effect.setTargetPointer(new FixedTarget(event.getTargetId()));
diff --git a/Mage.Sets/src/mage/cards/h/HeraldOfWar.java b/Mage.Sets/src/mage/cards/h/HeraldOfWar.java
index 4ab890792c6..27bbed4c1e5 100644
--- a/Mage.Sets/src/mage/cards/h/HeraldOfWar.java
+++ b/Mage.Sets/src/mage/cards/h/HeraldOfWar.java
@@ -1,4 +1,3 @@
-
package mage.cards.h;
import java.util.UUID;
@@ -25,7 +24,7 @@ import mage.util.CardUtil;
public final class HeraldOfWar extends CardImpl {
public HeraldOfWar(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}");
this.subtype.add(SubType.ANGEL);
this.power = new MageInt(3);
@@ -54,7 +53,7 @@ class HeraldOfWarCostReductionEffect extends CostModificationEffectImpl {
HeraldOfWarCostReductionEffect() {
super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST);
- staticText = "Angel spells and Human spells you cast cost {1} less to cast for each +1/+1 counter on Herald of War";
+ staticText = "Angel spells and Human spells you cast cost {1} less to cast for each +1/+1 counter on {this}";
}
HeraldOfWarCostReductionEffect(HeraldOfWarCostReductionEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/h/HumOfTheRadix.java b/Mage.Sets/src/mage/cards/h/HumOfTheRadix.java
index 7e806c12c61..8cf5a54708c 100644
--- a/Mage.Sets/src/mage/cards/h/HumOfTheRadix.java
+++ b/Mage.Sets/src/mage/cards/h/HumOfTheRadix.java
@@ -1,6 +1,5 @@
package mage.cards.h;
-import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
@@ -13,6 +12,7 @@ import mage.game.Game;
import mage.util.CardUtil;
import java.util.UUID;
+import mage.cards.Card;
/**
* @author Pete Rossi
@@ -58,9 +58,12 @@ class HumOfTheRadixCostIncreaseEffect extends CostModificationEffectImpl {
@Override
public boolean applies(Ability abilityToModify, Ability source, Game game) {
if (abilityToModify instanceof SpellAbility) {
- MageObject sourceObject = abilityToModify.getSourceObject(game);
- if (sourceObject != null && sourceObject.isArtifact()) {
- return true;
+ Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game);
+ if (spellCard != null) {
+ if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) {
+ spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game);
+ }
+ return !spellCard.isArtifact();
}
}
return false;
diff --git a/Mage.Sets/src/mage/cards/h/HuntersFeast.java b/Mage.Sets/src/mage/cards/h/HuntersFeast.java
index 8da07218961..24b87153c94 100644
--- a/Mage.Sets/src/mage/cards/h/HuntersFeast.java
+++ b/Mage.Sets/src/mage/cards/h/HuntersFeast.java
@@ -1,5 +1,3 @@
-
-
package mage.cards.h;
import java.util.UUID;
@@ -16,8 +14,9 @@ import mage.target.TargetPlayer;
public final class HuntersFeast extends CardImpl {
public HuntersFeast(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{G}");
+ // Any number of target players each gain 6 life.
this.getSpellAbility().addTarget(new TargetPlayer(0, Integer.MAX_VALUE, false));
this.getSpellAbility().addEffect(new GainLifeTargetEffect(6));
}
diff --git a/Mage.Sets/src/mage/cards/i/IndomitableArchangel.java b/Mage.Sets/src/mage/cards/i/IndomitableArchangel.java
index f0282360f99..fb63a57c278 100644
--- a/Mage.Sets/src/mage/cards/i/IndomitableArchangel.java
+++ b/Mage.Sets/src/mage/cards/i/IndomitableArchangel.java
@@ -1,24 +1,21 @@
-
-
package mage.cards.i;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.ShroudAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.Duration;
-import mage.constants.Zone;
+import mage.constants.*;
import mage.filter.FilterPermanent;
+import java.util.UUID;
+
/**
* @author nantuko
*/
@@ -33,15 +30,21 @@ public final class IndomitableArchangel extends CardImpl {
}
public IndomitableArchangel(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}");
this.subtype.add(SubType.ANGEL);
-
this.power = new MageInt(4);
this.toughness = new MageInt(4);
+
+ // Flying
this.addAbility(FlyingAbility.getInstance());
+
+ // Metalcraft — Artifacts you control have shroud as long as you control three or more artifacts. (An artifact with shroud can’t be the target of spells or abilities.)
ContinuousEffect gainAbilityEffect = new GainAbilityControlledEffect(ShroudAbility.getInstance(), Duration.WhileOnBattlefield, filter);
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(gainAbilityEffect, MetalcraftCondition.instance, rule);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance)
+ );
}
public IndomitableArchangel(final IndomitableArchangel card) {
diff --git a/Mage.Sets/src/mage/cards/i/InventorsFair.java b/Mage.Sets/src/mage/cards/i/InventorsFair.java
index f604e540469..502f184803b 100644
--- a/Mage.Sets/src/mage/cards/i/InventorsFair.java
+++ b/Mage.Sets/src/mage/cards/i/InventorsFair.java
@@ -1,7 +1,5 @@
-
package mage.cards.i;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
@@ -11,9 +9,11 @@ import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.mana.ColorlessManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.Zone;
@@ -24,8 +24,9 @@ import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.target.common.TargetCardInLibrary;
+import java.util.UUID;
+
/**
- *
* @author fireshoes
*/
public final class InventorsFair extends CardImpl {
@@ -37,7 +38,7 @@ public final class InventorsFair extends CardImpl {
}
public InventorsFair(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.LAND},"");
+ super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
addSuperType(SuperType.LEGENDARY);
// At the beginning of your upkeep, if you control three or more artifacts, you gain 1 life.
@@ -52,6 +53,8 @@ public final class InventorsFair extends CardImpl {
new GenericManaCost(4), MetalcraftCondition.instance);
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost());
+ ability.setAbilityWord(AbilityWord.METALCRAFT);
+ ability.addHint(MetalcraftHint.instance);
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/j/JorKadeenThePrevailer.java b/Mage.Sets/src/mage/cards/j/JorKadeenThePrevailer.java
index 0a9910044d7..2588b2b5abe 100644
--- a/Mage.Sets/src/mage/cards/j/JorKadeenThePrevailer.java
+++ b/Mage.Sets/src/mage/cards/j/JorKadeenThePrevailer.java
@@ -1,24 +1,20 @@
-
package mage.cards.j;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.Duration;
-import mage.constants.SuperType;
-import mage.constants.Zone;
+import mage.constants.*;
import mage.filter.StaticFilters;
+import java.util.UUID;
+
/**
- *
* @author North
*/
public final class JorKadeenThePrevailer extends CardImpl {
@@ -40,7 +36,9 @@ public final class JorKadeenThePrevailer extends CardImpl {
// Metalcraft — Creatures you control get +3/+0 as long as you control three or more artifacts.
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(new BoostControlledEffect(3, 0, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE, false),
MetalcraftCondition.instance, effectText);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance));
}
public JorKadeenThePrevailer(final JorKadeenThePrevailer card) {
diff --git a/Mage.Sets/src/mage/cards/k/KadenaSlinkingSorcerer.java b/Mage.Sets/src/mage/cards/k/KadenaSlinkingSorcerer.java
index 1b8349cf815..181c7186764 100644
--- a/Mage.Sets/src/mage/cards/k/KadenaSlinkingSorcerer.java
+++ b/Mage.Sets/src/mage/cards/k/KadenaSlinkingSorcerer.java
@@ -5,6 +5,7 @@ import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
+import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -14,10 +15,9 @@ import mage.constants.WatcherScope;
import mage.filter.FilterCard;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledCreaturePermanent;
-import mage.filter.predicate.ObjectPlayer;
-import mage.filter.predicate.ObjectPlayerPredicate;
+import mage.filter.predicate.Predicate;
+import mage.filter.predicate.other.FaceDownCastablePredicate;
import mage.filter.predicate.other.FaceDownPredicate;
-import mage.game.Controllable;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.stack.Spell;
@@ -32,12 +32,12 @@ import java.util.UUID;
*/
public final class KadenaSlinkingSorcerer extends CardImpl {
- private static final FilterCard filter = new FilterCard();
- private static final FilterPermanent filter2 = new FilterControlledCreaturePermanent("a face-down creature");
+ private static final FilterCard filterFirstFaceDownSpell = new FilterCard("first face-down creature spell");
+ private static final FilterPermanent filterFaceDownPermanent = new FilterControlledCreaturePermanent("a face-down creature");
static {
- filter.add(KadenaSlinkingSorcererPredicate.instance);
- filter2.add(FaceDownPredicate.instance);
+ filterFirstFaceDownSpell.add(KadenaSlinkingSorcererPredicate.instance);
+ filterFaceDownPermanent.add(FaceDownPredicate.instance);
}
public KadenaSlinkingSorcerer(UUID ownerId, CardSetInfo setInfo) {
@@ -51,13 +51,13 @@ public final class KadenaSlinkingSorcerer extends CardImpl {
// The first face-down creature spell you cast each turn costs {3} less to cast.
this.addAbility(new SimpleStaticAbility(
- new SpellsCostReductionControllerEffect(filter, 3)
+ new SpellsCostReductionControllerEffect(filterFirstFaceDownSpell, 3)
.setText("The first face-down creature spell you cast each turn costs {3} less to cast.")
), new KadenaSlinkingSorcererWatcher());
// Whenever a face-down creature enters the battlefield under your control, draw a card.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
- new DrawCardSourceControllerEffect(1), filter2
+ new DrawCardSourceControllerEffect(1), filterFaceDownPermanent
));
}
@@ -71,16 +71,15 @@ public final class KadenaSlinkingSorcerer extends CardImpl {
}
}
-enum KadenaSlinkingSorcererPredicate implements ObjectPlayerPredicate> {
+enum KadenaSlinkingSorcererPredicate implements Predicate {
instance;
@Override
- public boolean apply(ObjectPlayer input, Game game) {
- if (input.getObject() instanceof Spell
- && ((Spell) input.getObject()).isCreature()
- && ((Spell) input.getObject()).isFaceDown(game)) {
- KadenaSlinkingSorcererWatcher watcher = game.getState().getWatcher(KadenaSlinkingSorcererWatcher.class);
- return watcher != null && !watcher.castFaceDownThisTurn(input.getPlayerId());
+ public boolean apply(Card input, Game game) {
+ KadenaSlinkingSorcererWatcher watcher = game.getState().getWatcher(KadenaSlinkingSorcererWatcher.class);
+ if (watcher != null) {
+ return FaceDownCastablePredicate.instance.apply(input, game)
+ && !watcher.castFaceDownThisTurn(input.getOwnerId());
}
return false;
}
diff --git a/Mage.Sets/src/mage/cards/k/KuldothaPhoenix.java b/Mage.Sets/src/mage/cards/k/KuldothaPhoenix.java
index 37a4218383e..6cf352d6dd4 100644
--- a/Mage.Sets/src/mage/cards/k/KuldothaPhoenix.java
+++ b/Mage.Sets/src/mage/cards/k/KuldothaPhoenix.java
@@ -1,7 +1,5 @@
-
package mage.cards.k;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.condition.CompoundCondition;
@@ -10,24 +8,22 @@ import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalActivatedAbility;
import mage.abilities.effects.common.ReturnSourceFromGraveyardToBattlefieldEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.AbilityWord;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.PhaseStep;
-import mage.constants.Zone;
+import mage.constants.*;
+
+import java.util.UUID;
/**
- *
* @author BetaSteward_at_googlemail.com
*/
public final class KuldothaPhoenix extends CardImpl {
public KuldothaPhoenix(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}{R}");
this.subtype.add(SubType.PHOENIX);
this.power = new MageInt(4);
@@ -36,16 +32,17 @@ public final class KuldothaPhoenix extends CardImpl {
// Flying, haste
this.addAbility(FlyingAbility.getInstance());
this.addAbility(HasteAbility.getInstance());
-
+
// Metalcraft — {4}: Return Kuldotha Phoenix from your graveyard to the battlefield.
// Activate this ability only during your upkeep and only if you control three or more artifacts.
- Ability ability = new ConditionalActivatedAbility(Zone.GRAVEYARD,
- new ReturnSourceFromGraveyardToBattlefieldEffect(),
- new ManaCostsImpl("{4}"),
+ Ability ability = new ConditionalActivatedAbility(Zone.GRAVEYARD,
+ new ReturnSourceFromGraveyardToBattlefieldEffect(),
+ new ManaCostsImpl("{4}"),
new CompoundCondition("during your upkeep and only if you control three or more artifacts",
new IsStepCondition(PhaseStep.UPKEEP), MetalcraftCondition.instance)
);
ability.setAbilityWord(AbilityWord.METALCRAFT);
+ ability.addHint(MetalcraftHint.instance);
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/l/LumengridDrake.java b/Mage.Sets/src/mage/cards/l/LumengridDrake.java
index 884ac2cced3..6b2dd038a0d 100644
--- a/Mage.Sets/src/mage/cards/l/LumengridDrake.java
+++ b/Mage.Sets/src/mage/cards/l/LumengridDrake.java
@@ -1,20 +1,22 @@
-
package mage.cards.l;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.TriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
* @author ayrat
*/
@@ -23,7 +25,7 @@ public final class LumengridDrake extends CardImpl {
private static final String ruleText = "Metalcraft — When {this} enters the battlefield, if you control three or more artifacts, return target creature to its owner's hand.";
public LumengridDrake(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
this.subtype.add(SubType.DRAKE);
this.color.setBlue(true);
@@ -37,6 +39,8 @@ public final class LumengridDrake extends CardImpl {
TriggeredAbility conditional = new ConditionalInterveningIfTriggeredAbility(
new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()), MetalcraftCondition.instance, ruleText);
conditional.addTarget(new TargetCreaturePermanent());
+ conditional.setAbilityWord(AbilityWord.METALCRAFT);
+ conditional.addHint(MetalcraftHint.instance);
this.addAbility(conditional);
}
diff --git a/Mage.Sets/src/mage/cards/m/MirranMettle.java b/Mage.Sets/src/mage/cards/m/MirranMettle.java
index 50b66bd8e03..07e13bbb3b4 100644
--- a/Mage.Sets/src/mage/cards/m/MirranMettle.java
+++ b/Mage.Sets/src/mage/cards/m/MirranMettle.java
@@ -1,19 +1,20 @@
-
package mage.cards.m;
-import java.util.UUID;
import mage.abilities.condition.LockedInCondition;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author North
*/
public final class MirranMettle extends CardImpl {
@@ -21,14 +22,17 @@ public final class MirranMettle extends CardImpl {
private static final String effectText = "Metalcraft — That creature gets +4/+4 until end of turn instead if you control three or more artifacts.";
public MirranMettle(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{G}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}");
+ // Target creature gets +2/+2 until end of turn.
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn));
- this.getSpellAbility().addEffect(new ConditionalContinuousEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn),
+ // Metalcraft — That creature gets +4/+4 until end of turn instead if you control three or more artifacts.
+ this.getSpellAbility().addEffect(new ConditionalContinuousEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn),
new LockedInCondition(MetalcraftCondition.instance), effectText));
+ this.getSpellAbility().setAbilityWord(AbilityWord.METALCRAFT);
+ this.getSpellAbility().addHint(MetalcraftHint.instance);
}
public MirranMettle(final MirranMettle card) {
diff --git a/Mage.Sets/src/mage/cards/m/MoltenPsyche.java b/Mage.Sets/src/mage/cards/m/MoltenPsyche.java
index b3ef8785c67..642ff01897a 100644
--- a/Mage.Sets/src/mage/cards/m/MoltenPsyche.java
+++ b/Mage.Sets/src/mage/cards/m/MoltenPsyche.java
@@ -3,12 +3,10 @@ package mage.cards.m;
import mage.abilities.Ability;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.effects.OneShotEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.Outcome;
-import mage.constants.WatcherScope;
-import mage.constants.Zone;
+import mage.constants.*;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.players.Player;
@@ -31,6 +29,8 @@ public final class MoltenPsyche extends CardImpl {
// Metalcraft — If you control three or more artifacts, Molten Psyche deals damage to each opponent equal to the number of cards that player has drawn this turn.
this.getSpellAbility().addEffect(new MoltenPsycheEffect());
this.getSpellAbility().addWatcher(new MoltenPsycheWatcher());
+ this.getSpellAbility().setAbilityWord(AbilityWord.METALCRAFT);
+ this.getSpellAbility().addHint(MetalcraftHint.instance);
}
public MoltenPsyche(final MoltenPsyche card) {
diff --git a/Mage.Sets/src/mage/cards/m/Morselhoarder.java b/Mage.Sets/src/mage/cards/m/Morselhoarder.java
index f78948cad38..709035548e7 100644
--- a/Mage.Sets/src/mage/cards/m/Morselhoarder.java
+++ b/Mage.Sets/src/mage/cards/m/Morselhoarder.java
@@ -1,4 +1,3 @@
-
package mage.cards.m;
import java.util.UUID;
@@ -7,8 +6,9 @@ import mage.Mana;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.costs.Cost;
import mage.abilities.costs.common.RemoveCountersSourceCost;
-import mage.abilities.effects.mana.AddManaOfAnyColorEffect;
+import mage.abilities.dynamicvalue.common.CountersSourceCount;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
+import mage.abilities.effects.mana.AddManaOfAnyColorEffect;
import mage.abilities.mana.ActivatedManaAbilityImpl;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -24,17 +24,17 @@ import mage.counters.CounterType;
public final class Morselhoarder extends CardImpl {
public Morselhoarder(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R/G}{R/G}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R/G}{R/G}");
this.subtype.add(SubType.ELEMENTAL);
this.power = new MageInt(6);
this.toughness = new MageInt(4);
// Morselhoarder enters the battlefield with two -1/-1 counters on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.M1M1.createInstance(2), false)));
-
+
// Remove a -1/-1 counter from Morselhoarder: Add one mana of any color.
this.addAbility(new MorselhoarderAbility());
-
+
}
public Morselhoarder(final Morselhoarder card) {
@@ -48,13 +48,14 @@ public final class Morselhoarder extends CardImpl {
}
class MorselhoarderAbility extends ActivatedManaAbilityImpl {
+
public MorselhoarderAbility() {
this(new RemoveCountersSourceCost(CounterType.M1M1.createInstance()));
}
public MorselhoarderAbility(Cost cost) {
- super(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(), cost);
- this.netMana.add(new Mana(0,0,0,0,0,0,1, 0));
+ super(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(1, new CountersSourceCount(CounterType.M1M1), false), cost);
+ this.netMana.add(new Mana(0, 0, 0, 0, 0, 0, 1, 0));
}
public MorselhoarderAbility(final MorselhoarderAbility ability) {
diff --git a/Mage.Sets/src/mage/cards/m/MoxOpal.java b/Mage.Sets/src/mage/cards/m/MoxOpal.java
index e0e23357753..0177e7c0ae1 100644
--- a/Mage.Sets/src/mage/cards/m/MoxOpal.java
+++ b/Mage.Sets/src/mage/cards/m/MoxOpal.java
@@ -1,11 +1,10 @@
-
package mage.cards.m;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.mana.AddManaOfAnyColorEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.mana.ActivateIfConditionManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -14,14 +13,15 @@ import mage.constants.CardType;
import mage.constants.SuperType;
import mage.constants.Zone;
+import java.util.UUID;
+
/**
- *
* @author BetaSteward_at_googlemail.com, Loki
*/
public final class MoxOpal extends CardImpl {
public MoxOpal(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{0}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{0}");
addSuperType(SuperType.LEGENDARY);
Ability ability = new ActivateIfConditionManaAbility(
@@ -30,6 +30,7 @@ public final class MoxOpal extends CardImpl {
new TapSourceCost(),
MetalcraftCondition.instance);
ability.setAbilityWord(AbilityWord.METALCRAFT);
+ ability.addHint(MetalcraftHint.instance);
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/m/MyrReservoir.java b/Mage.Sets/src/mage/cards/m/MyrReservoir.java
index 86018854a7e..6f4acfc1036 100644
--- a/Mage.Sets/src/mage/cards/m/MyrReservoir.java
+++ b/Mage.Sets/src/mage/cards/m/MyrReservoir.java
@@ -1,5 +1,6 @@
package mage.cards.m;
+import java.util.UUID;
import mage.ConditionalMana;
import mage.MageObject;
import mage.Mana;
@@ -20,8 +21,6 @@ import mage.filter.FilterCard;
import mage.game.Game;
import mage.target.common.TargetCardInYourGraveyard;
-import java.util.UUID;
-
/**
* @author nantuko
*/
@@ -36,10 +35,10 @@ public final class MyrReservoir extends CardImpl {
public MyrReservoir(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
- // {tap}: Add {C}{C}. Spend this mana only to cast Myr spells or activate abilities of Myr.
+ // {T}: Add {C}{C}. Spend this mana only to cast Myr spells or activate abilities of Myr.
this.addAbility(new MyrReservoirManaAbility());
- // {3}, {tap}: Return target Myr card from your graveyard to your hand.
+ // {3}, {T}: Return target Myr card from your graveyard to your hand.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new GenericManaCost(3));
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetCardInYourGraveyard(myrCardFilter));
diff --git a/Mage.Sets/src/mage/cards/n/NestOfScarabs.java b/Mage.Sets/src/mage/cards/n/NestOfScarabs.java
index 2086264318a..12109cab874 100644
--- a/Mage.Sets/src/mage/cards/n/NestOfScarabs.java
+++ b/Mage.Sets/src/mage/cards/n/NestOfScarabs.java
@@ -1,7 +1,5 @@
-
package mage.cards.n;
-import java.util.UUID;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.dynamicvalue.common.EffectKeyValue;
import mage.abilities.effects.common.CreateTokenEffect;
@@ -15,8 +13,9 @@ import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.NestOfScarabsBlackInsectToken;
+import java.util.UUID;
+
/**
- *
* @author stravant
*/
public final class NestOfScarabs extends CardImpl {
@@ -63,7 +62,7 @@ class NestOfScarabsTriggeredAbility extends TriggeredAbilityImpl {
if (permanent == null) {
permanent = game.getPermanentEntering(event.getTargetId());
}
- if (permanent.isCreature()) {
+ if (permanent != null && permanent.isCreature()) {
getEffects().forEach(effect -> effect.setValue("countersAdded", event.getAmount()));
return true;
}
diff --git a/Mage.Sets/src/mage/cards/n/NykthosShrineToNyx.java b/Mage.Sets/src/mage/cards/n/NykthosShrineToNyx.java
index 7c6194e0592..0e4a2e3c776 100644
--- a/Mage.Sets/src/mage/cards/n/NykthosShrineToNyx.java
+++ b/Mage.Sets/src/mage/cards/n/NykthosShrineToNyx.java
@@ -1,5 +1,9 @@
package mage.cards.n;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.costs.common.TapSourceCost;
@@ -17,11 +21,6 @@ import mage.constants.Zone;
import mage.game.Game;
import mage.players.Player;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-import java.util.stream.Collectors;
-
/**
* @author LevelX2
*/
@@ -69,14 +68,6 @@ class NykthosShrineToNyxManaAbility extends ActivatedManaAbilityImpl {
return new NykthosShrineToNyxManaAbility(this);
}
- @Override
- public List getNetMana(Game game) {
- List netMana = new ArrayList<>();
- if (game != null) {
- netMana.addAll(((ManaEffect) this.getEffects().get(0)).getNetMana(game, this));
- }
- return netMana;
- }
}
class NykthosDynamicManaEffect extends ManaEffect {
diff --git a/Mage.Sets/src/mage/cards/n/NyxLotus.java b/Mage.Sets/src/mage/cards/n/NyxLotus.java
index b657b8d0d44..577c1a76b11 100644
--- a/Mage.Sets/src/mage/cards/n/NyxLotus.java
+++ b/Mage.Sets/src/mage/cards/n/NyxLotus.java
@@ -1,5 +1,9 @@
package mage.cards.n;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTappedAbility;
@@ -16,11 +20,6 @@ import mage.constants.Zone;
import mage.game.Game;
import mage.players.Player;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-import java.util.stream.Collectors;
-
/**
* @author TheElk801
*/
@@ -68,14 +67,6 @@ class NyxLotusManaAbility extends ActivatedManaAbilityImpl {
return new NyxLotusManaAbility(this);
}
- @Override
- public List getNetMana(Game game) {
- List netMana = new ArrayList<>();
- if (game != null) {
- netMana.addAll(((ManaEffect) this.getEffects().get(0)).getNetMana(game, this));
- }
- return netMana;
- }
}
class NyxLotusDynamicManaEffect extends ManaEffect {
diff --git a/Mage.Sets/src/mage/cards/o/ObscuringAether.java b/Mage.Sets/src/mage/cards/o/ObscuringAether.java
index 1b4e559253f..6ede93fc401 100644
--- a/Mage.Sets/src/mage/cards/o/ObscuringAether.java
+++ b/Mage.Sets/src/mage/cards/o/ObscuringAether.java
@@ -1,7 +1,5 @@
-
package mage.cards.o;
-import java.util.UUID;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
@@ -14,10 +12,11 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureCard;
-import mage.filter.predicate.other.FaceDownPredicate;
+import mage.filter.predicate.other.FaceDownCastablePredicate;
+
+import java.util.UUID;
/**
- *
* @author LevelX2
*/
public final class ObscuringAether extends CardImpl {
@@ -25,7 +24,7 @@ public final class ObscuringAether extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("Face-down creature spells");
static {
- filter.add(FaceDownPredicate.instance);
+ filter.add(FaceDownCastablePredicate.instance);
}
public ObscuringAether(UUID ownerId, CardSetInfo setInfo) {
diff --git a/Mage.Sets/src/mage/cards/p/PuresteelPaladin.java b/Mage.Sets/src/mage/cards/p/PuresteelPaladin.java
index ae6c3fcf398..745e9c5a7c8 100644
--- a/Mage.Sets/src/mage/cards/p/PuresteelPaladin.java
+++ b/Mage.Sets/src/mage/cards/p/PuresteelPaladin.java
@@ -1,8 +1,5 @@
-
-
package mage.cards.p;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
@@ -11,6 +8,7 @@ import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.EquipAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -18,6 +16,8 @@ import mage.constants.*;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterControlledPermanent;
+import java.util.UUID;
+
/**
* @author Loki
*/
@@ -29,7 +29,7 @@ public final class PuresteelPaladin extends CardImpl {
}
public PuresteelPaladin(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W}{W}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{W}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.KNIGHT);
@@ -38,11 +38,15 @@ public final class PuresteelPaladin extends CardImpl {
// Whenever an Equipment enters the battlefield under your control, you may draw a card.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), filter, true));
+
// Metalcraft — Equipment you control have equip {0} as long as you control three or more artifacts
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(
new GainAbilityControlledEffect(new EquipAbility(Outcome.AddAbility, new GenericManaCost(0)), Duration.WhileOnBattlefield, filter),
MetalcraftCondition.instance,
- "Metalcraft — Equipment you control have equip {0} as long as you control three or more artifacts")));
+ "Metalcraft — Equipment you control have equip {0} as long as you control three or more artifacts"))
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance)
+ );
}
public PuresteelPaladin(final PuresteelPaladin card) {
diff --git a/Mage.Sets/src/mage/cards/p/PyromancersGauntlet.java b/Mage.Sets/src/mage/cards/p/PyromancersGauntlet.java
index 6c6c1c9b4cd..4e56c86f578 100644
--- a/Mage.Sets/src/mage/cards/p/PyromancersGauntlet.java
+++ b/Mage.Sets/src/mage/cards/p/PyromancersGauntlet.java
@@ -1,4 +1,3 @@
-
package mage.cards.p;
import java.util.UUID;
@@ -25,7 +24,7 @@ import mage.util.CardUtil;
public final class PyromancersGauntlet extends CardImpl {
public PyromancersGauntlet(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{5}");
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
// If a red instant or sorcery spell you control or a red planeswalker you control would deal damage to a permanent or player, it deals that much damage plus 2 to that permanent or player instead.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PyromancersGauntletReplacementEffect()));
@@ -58,22 +57,21 @@ class PyromancersGauntletReplacementEffect extends ReplacementEffectImpl {
|| event.getType() == GameEvent.EventType.DAMAGE_CREATURE
|| event.getType() == GameEvent.EventType.DAMAGE_PLANESWALKER;
}
-
+
@Override
public boolean applies(GameEvent event, Ability source, Game game) {
MageObject object = game.getObject(event.getSourceId());
if (object instanceof Spell) {
if (((Spell) object).isControlledBy(source.getControllerId())
&& (object.isInstant()
- || object.isSorcery())){
+ || object.isSorcery())) {
return true;
}
}
- Permanent permanent = game.getBattlefield().getPermanent(event.getSourceId());
- if(permanent != null && permanent.isPlaneswalker()){
- return true;
- }
- return false;
+ Permanent permanent = game.getPermanentOrLKIBattlefield(event.getSourceId());
+ return permanent != null
+ && permanent.isPlaneswalker()
+ && source.isControlledBy(permanent.getControllerId());
}
@Override
diff --git a/Mage.Sets/src/mage/cards/r/RakdosLordOfRiots.java b/Mage.Sets/src/mage/cards/r/RakdosLordOfRiots.java
index 00a84e1aeeb..0fdb43f8e3b 100644
--- a/Mage.Sets/src/mage/cards/r/RakdosLordOfRiots.java
+++ b/Mage.Sets/src/mage/cards/r/RakdosLordOfRiots.java
@@ -15,10 +15,10 @@ import mage.constants.*;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
-import mage.game.stack.Spell;
import mage.util.CardUtil;
import java.util.UUID;
+import mage.cards.Card;
/**
* @author LevelX2
@@ -115,9 +115,12 @@ class RakdosLordOfRiotsCostReductionEffect extends CostModificationEffectImpl {
public boolean applies(Ability abilityToModify, Ability source, Game game) {
if (abilityToModify instanceof SpellAbility) {
if (abilityToModify.isControlledBy(source.getControllerId())) {
- Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
- if (spell != null) {
- return spell.isCreature();
+ Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game);
+ if (spellCard != null) {
+ if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) {
+ spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game);
+ }
+ return spellCard.isCreature();
}
}
}
diff --git a/Mage.Sets/src/mage/cards/r/RazorfieldRhino.java b/Mage.Sets/src/mage/cards/r/RazorfieldRhino.java
index 28b09384e2a..dcb832c7cee 100644
--- a/Mage.Sets/src/mage/cards/r/RazorfieldRhino.java
+++ b/Mage.Sets/src/mage/cards/r/RazorfieldRhino.java
@@ -1,37 +1,37 @@
-
-
package mage.cards.r;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.Duration;
-import mage.constants.Zone;
+import mage.constants.*;
+
+import java.util.UUID;
/**
- *
* @author Loki
*/
public final class RazorfieldRhino extends CardImpl {
- public RazorfieldRhino (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{6}");
+ public RazorfieldRhino(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{6}");
this.subtype.add(SubType.RHINO);
this.power = new MageInt(4);
this.toughness = new MageInt(4);
+
+ // Metalcraft — Razorfield Rhino gets +2/+2 as long as you control three or more artifacts.
ContinuousEffect effect1 = new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect1, MetalcraftCondition.instance, "Metalcraft — Razorfield Rhino gets +2/+2 as long as you control three or more artifacts")));
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect1, MetalcraftCondition.instance, "Metalcraft — Razorfield Rhino gets +2/+2 as long as you control three or more artifacts"))
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance));
}
- public RazorfieldRhino (final RazorfieldRhino card) {
+ public RazorfieldRhino(final RazorfieldRhino card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/r/RustedRelic.java b/Mage.Sets/src/mage/cards/r/RustedRelic.java
index 95014e11eb4..b845edb68c9 100644
--- a/Mage.Sets/src/mage/cards/r/RustedRelic.java
+++ b/Mage.Sets/src/mage/cards/r/RustedRelic.java
@@ -1,38 +1,38 @@
-
-
package mage.cards.r;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.Duration;
-import mage.constants.Zone;
+import mage.constants.*;
import mage.game.permanent.token.TokenImpl;
-import mage.game.permanent.token.Token;
+
+import java.util.UUID;
/**
- *
* @author Loki
*/
public final class RustedRelic extends CardImpl {
- public RustedRelic (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}");
+ public RustedRelic(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
+
+ // Metalcraft — Rusted Relic is a 5/5 Golem artifact creature as long as you control three or more artifacts.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
- new ConditionalContinuousEffect(
- new BecomesCreatureSourceEffect(new RustedRelicToken(), "artifact", Duration.WhileOnBattlefield),
- MetalcraftCondition.instance,
- "Metalcraft — {this} is a 5/5 Golem artifact creature as long as you control three or more artifacts")));
+ new ConditionalContinuousEffect(
+ new BecomesCreatureSourceEffect(new RustedRelicToken(), "artifact", Duration.WhileOnBattlefield),
+ MetalcraftCondition.instance,
+ "Metalcraft — {this} is a 5/5 Golem artifact creature as long as you control three or more artifacts"))
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance)
+ );
}
- public RustedRelic (final RustedRelic card) {
+ public RustedRelic(final RustedRelic card) {
super(card);
}
@@ -51,6 +51,7 @@ class RustedRelicToken extends TokenImpl {
power = new MageInt(5);
toughness = new MageInt(5);
}
+
public RustedRelicToken(final RustedRelicToken token) {
super(token);
}
diff --git a/Mage.Sets/src/mage/cards/s/SatyrFiredancer.java b/Mage.Sets/src/mage/cards/s/SatyrFiredancer.java
index 88bfb5bdc20..762b17575d4 100644
--- a/Mage.Sets/src/mage/cards/s/SatyrFiredancer.java
+++ b/Mage.Sets/src/mage/cards/s/SatyrFiredancer.java
@@ -1,6 +1,6 @@
-
package mage.cards.s;
+import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
@@ -19,18 +19,11 @@ import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent;
-import mage.game.stack.StackObject;
import mage.players.Player;
import mage.target.common.TargetCreaturePermanent;
import mage.target.targetadjustment.TargetAdjuster;
import mage.target.targetpointer.FixedTarget;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
/**
* @author LevelX2
*/
@@ -80,16 +73,15 @@ class SatyrFiredancerTriggeredAbility extends TriggeredAbilityImpl {
@Override
public boolean checkTrigger(GameEvent event, Game game) {
- boolean controlledBy = isControlledBy(game.getControllerId(event.getSourceId()));
- if (!controlledBy) {
+ if (!isControlledBy(game.getControllerId(event.getSourceId()))) {
return false;
}
MageObject damageSource = game.getObject(event.getSourceId());
if (damageSource == null) {
return false;
}
- UUID damageTarget = event.getTargetId();
- if (!game.getOpponents(getControllerId()).contains(damageTarget)) {
+ UUID damageTargetId = event.getTargetId();
+ if (!game.getOpponents(getControllerId()).contains(damageTargetId)) {
return false;
}
MageObject sourceObject = game.getObject(event.getSourceId());
@@ -97,7 +89,7 @@ class SatyrFiredancerTriggeredAbility extends TriggeredAbilityImpl {
return false;
}
for (Effect effect : this.getEffects()) {
- effect.setTargetPointer(new FixedTarget(damageTarget)); // used by adjust targets
+ effect.setTargetPointer(new FixedTarget(damageTargetId)); // used by adjust targets
effect.setValue("damage", event.getAmount());
}
return true;
@@ -152,4 +144,4 @@ enum SatyrFiredancerAdjuster implements TargetAdjuster {
ability.getTargets().add(new TargetCreaturePermanent(filter));
}
}
-}
\ No newline at end of file
+}
diff --git a/Mage.Sets/src/mage/cards/s/ScreechingSilcaw.java b/Mage.Sets/src/mage/cards/s/ScreechingSilcaw.java
index 87a8f4c538c..7d4e8dfe3e2 100644
--- a/Mage.Sets/src/mage/cards/s/ScreechingSilcaw.java
+++ b/Mage.Sets/src/mage/cards/s/ScreechingSilcaw.java
@@ -1,4 +1,3 @@
-
package mage.cards.s;
import mage.MageInt;
@@ -7,9 +6,11 @@ import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
@@ -23,10 +24,10 @@ public final class ScreechingSilcaw extends CardImpl {
public ScreechingSilcaw(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
this.subtype.add(SubType.BIRD);
-
this.power = new MageInt(1);
this.toughness = new MageInt(2);
+ // Flying
this.addAbility(FlyingAbility.getInstance());
//"Metalcraft — Whenever Screeching Silcaw deals combat damage to a player, if you control three or more artifacts, that player puts the top four cards of their library into their graveyard.
@@ -36,6 +37,8 @@ public final class ScreechingSilcaw extends CardImpl {
), MetalcraftCondition.instance, "Metalcraft — Whenever {this} " +
"deals combat damage to a player, if you control three or more artifacts, that player mills four cards."
);
+ conditional.setAbilityWord(AbilityWord.METALCRAFT);
+ conditional.addHint(MetalcraftHint.instance);
this.addAbility(conditional);
}
diff --git a/Mage.Sets/src/mage/cards/s/SemblanceAnvil.java b/Mage.Sets/src/mage/cards/s/SemblanceAnvil.java
index dba8d34db80..18308677210 100644
--- a/Mage.Sets/src/mage/cards/s/SemblanceAnvil.java
+++ b/Mage.Sets/src/mage/cards/s/SemblanceAnvil.java
@@ -1,5 +1,7 @@
package mage.cards.s;
+import java.util.List;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@@ -18,9 +20,6 @@ import mage.players.Player;
import mage.target.TargetCard;
import mage.util.CardUtil;
-import java.util.List;
-import java.util.UUID;
-
/**
* @author nantuko
*/
@@ -107,15 +106,19 @@ class SemblanceAnvilCostReductionEffect extends CostModificationEffectImpl {
@Override
public boolean applies(Ability abilityToModify, Ability source, Game game) {
- if (abilityToModify instanceof SpellAbility) {
- Card sourceCard = game.getCard(abilityToModify.getSourceId());
- if (sourceCard != null && sourceCard.isOwnedBy(source.getControllerId())) {
+ if (abilityToModify instanceof SpellAbility
+ && abilityToModify.isControlledBy(source.getControllerId())) {
+ Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game);
+ if (spellCard != null) {
+ if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) {
+ spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game);
+ }
Permanent permanent = game.getPermanent(source.getSourceId());
if (permanent != null) {
List imprinted = permanent.getImprinted();
if (imprinted != null && !imprinted.isEmpty()) {
Card imprintedCard = game.getCard(imprinted.get(0));
- return imprintedCard != null && imprintedCard.shareTypes(sourceCard);
+ return imprintedCard != null && imprintedCard.shareTypes(spellCard);
}
}
}
diff --git a/Mage.Sets/src/mage/cards/s/SnapsailGlider.java b/Mage.Sets/src/mage/cards/s/SnapsailGlider.java
index 7cc55dd5da2..524b1fb2c86 100644
--- a/Mage.Sets/src/mage/cards/s/SnapsailGlider.java
+++ b/Mage.Sets/src/mage/cards/s/SnapsailGlider.java
@@ -1,40 +1,40 @@
-
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.Duration;
-import mage.constants.Zone;
+import mage.constants.*;
+
+import java.util.UUID;
/**
- *
* @author Loki, nantuko
*/
public final class SnapsailGlider extends CardImpl {
protected static String rule = "Metalcraft — Snapsail Glider has flying as long as you control three or more artifacts";
- public SnapsailGlider (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{3}");
+ public SnapsailGlider(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}");
this.subtype.add(SubType.CONSTRUCT);
this.power = new MageInt(2);
this.toughness = new MageInt(2);
+
+ // Metalcraft — Snapsail Glider has flying as long as you control three or more artifacts.
ContinuousEffect effect = new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect, MetalcraftCondition.instance, rule)));
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect, MetalcraftCondition.instance, rule))
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance));
}
- public SnapsailGlider (final SnapsailGlider card) {
+ public SnapsailGlider(final SnapsailGlider card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/s/SpiralingDuelist.java b/Mage.Sets/src/mage/cards/s/SpiralingDuelist.java
index 52af0e6edc4..6ee7422305b 100644
--- a/Mage.Sets/src/mage/cards/s/SpiralingDuelist.java
+++ b/Mage.Sets/src/mage/cards/s/SpiralingDuelist.java
@@ -1,23 +1,20 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.DoubleStrikeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.Duration;
-import mage.constants.Zone;
+import mage.constants.*;
+
+import java.util.UUID;
/**
- *
* @author North
*/
public final class SpiralingDuelist extends CardImpl {
@@ -25,15 +22,17 @@ public final class SpiralingDuelist extends CardImpl {
private static final String effectText = "Metalcraft — Spiraling Duelist has double strike as long as you control three or more artifacts.";
public SpiralingDuelist(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.BERSERKER);
-
this.power = new MageInt(3);
this.toughness = new MageInt(1);
+ // Metalcraft — Spiraling Duelist has double strike as long as you control three or more artifacts.
ContinuousEffect effect = new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance(), Duration.WhileOnBattlefield);
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect, MetalcraftCondition.instance, effectText)));
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(effect, MetalcraftCondition.instance, effectText))
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance));
}
public SpiralingDuelist(final SpiralingDuelist card) {
diff --git a/Mage.Sets/src/mage/cards/s/SpireSerpent.java b/Mage.Sets/src/mage/cards/s/SpireSerpent.java
index a8338bd6519..ae207c09889 100644
--- a/Mage.Sets/src/mage/cards/s/SpireSerpent.java
+++ b/Mage.Sets/src/mage/cards/s/SpireSerpent.java
@@ -1,7 +1,5 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
@@ -11,16 +9,15 @@ import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.combat.CanAttackAsThoughItDidntHaveDefenderSourceEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.abilities.keyword.DefenderAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.CardType;
-import mage.constants.SubType;
-import mage.constants.Duration;
-import mage.constants.Zone;
+import mage.constants.*;
+
+import java.util.UUID;
/**
- *
* @author BetaSteward_at_googlemail.com
*/
public final class SpireSerpent extends CardImpl {
@@ -28,19 +25,24 @@ public final class SpireSerpent extends CardImpl {
private static final String abilityText1 = "Metalcraft — As long as you control three or more artifacts, {this} gets +2/+2";
public SpireSerpent(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}");
this.subtype.add(SubType.SERPENT);
this.color.setBlue(true);
this.power = new MageInt(3);
this.toughness = new MageInt(5);
+ // Defender
this.addAbility(DefenderAbility.getInstance());
+
+ // Metalcraft — As long as you control three or more artifacts, Spire Serpent gets +2/+2 and can attack as though it didn’t have defender.
ConditionalContinuousEffect effect1 = new ConditionalContinuousEffect(new BoostSourceEffect(2, 2, Duration.WhileOnBattlefield), MetalcraftCondition.instance, abilityText1);
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect1);
Effect effect = new ConditionalAsThoughEffect(new CanAttackAsThoughItDidntHaveDefenderSourceEffect(Duration.WhileOnBattlefield),
MetalcraftCondition.instance);
effect.setText("and can attack as though it didn't have defender");
ability.addEffect(effect);
+ ability.setAbilityWord(AbilityWord.METALCRAFT);
+ ability.addHint(MetalcraftHint.instance);
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/s/StoicRebuttal.java b/Mage.Sets/src/mage/cards/s/StoicRebuttal.java
index 81352927b01..629cba15b23 100644
--- a/Mage.Sets/src/mage/cards/s/StoicRebuttal.java
+++ b/Mage.Sets/src/mage/cards/s/StoicRebuttal.java
@@ -1,11 +1,11 @@
package mage.cards.s;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.effects.common.CounterTargetEffect;
import mage.abilities.effects.common.cost.SpellCostReductionSourceEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
@@ -13,6 +13,8 @@ import mage.constants.CardType;
import mage.constants.Zone;
import mage.target.TargetSpell;
+import java.util.UUID;
+
/**
* @author ayrat
*/
@@ -25,6 +27,7 @@ public final class StoicRebuttal extends CardImpl {
Ability ability = new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect(1, MetalcraftCondition.instance));
ability.setRuleAtTheTop(true);
ability.setAbilityWord(AbilityWord.METALCRAFT);
+ ability.addHint(MetalcraftHint.instance);
this.addAbility(ability);
// Counter target spell.
diff --git a/Mage.Sets/src/mage/cards/t/TezzeretArtificeMaster.java b/Mage.Sets/src/mage/cards/t/TezzeretArtificeMaster.java
index 472be041766..a8cb9d8aa3c 100644
--- a/Mage.Sets/src/mage/cards/t/TezzeretArtificeMaster.java
+++ b/Mage.Sets/src/mage/cards/t/TezzeretArtificeMaster.java
@@ -1,6 +1,5 @@
package mage.cards.t;
-import java.util.UUID;
import mage.abilities.LoyaltyAbility;
import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility;
import mage.abilities.condition.common.MetalcraftCondition;
@@ -8,16 +7,19 @@ import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.GetEmblemEffect;
-import mage.constants.SubType;
-import mage.constants.SuperType;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
import mage.game.command.emblems.TezzeretArtificeMasterEmblem;
import mage.game.permanent.token.ThopterColorlessToken;
+import java.util.UUID;
+
/**
- *
* @author TheElk801
*/
public final class TezzeretArtificeMaster extends CardImpl {
@@ -38,8 +40,10 @@ public final class TezzeretArtificeMaster extends CardImpl {
new DrawCardSourceControllerEffect(1),
MetalcraftCondition.instance,
"Draw a card. If you control three or "
- + "more artifacts, draw two cards instead"
- ), 0));
+ + "more artifacts, draw two cards instead"
+ ), 0)
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance));
// −9: You get an emblem with "At the beginning of your end step, search your library for a permanent card, put it into the battlefield, then shuffle your library."
this.addAbility(new LoyaltyAbility(
diff --git a/Mage.Sets/src/mage/cards/t/TorbranThaneOfRedFell.java b/Mage.Sets/src/mage/cards/t/TorbranThaneOfRedFell.java
index 3abdd57d629..7f0b09a09dd 100644
--- a/Mage.Sets/src/mage/cards/t/TorbranThaneOfRedFell.java
+++ b/Mage.Sets/src/mage/cards/t/TorbranThaneOfRedFell.java
@@ -1,5 +1,6 @@
package mage.cards.t;
+import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
@@ -14,8 +15,6 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.util.CardUtil;
-import java.util.UUID;
-
/**
* @author TheElk801
*/
@@ -30,7 +29,7 @@ public final class TorbranThaneOfRedFell extends CardImpl {
this.power = new MageInt(2);
this.toughness = new MageInt(4);
- // If a red source you control would deal damage to an opponent or a
+ // If a red source you control would deal damage to an opponent or a
// permanent an opponent controls, it deals that much damage plus 2 instead.
this.addAbility(new SimpleStaticAbility(new TorbranThaneOfRedFellEffect()));
}
diff --git a/Mage.Sets/src/mage/cards/t/TrinketMage.java b/Mage.Sets/src/mage/cards/t/TrinketMage.java
index 2d39f8b52bd..0459e8fe6e2 100644
--- a/Mage.Sets/src/mage/cards/t/TrinketMage.java
+++ b/Mage.Sets/src/mage/cards/t/TrinketMage.java
@@ -21,7 +21,7 @@ import mage.target.common.TargetCardInLibrary;
*/
public final class TrinketMage extends CardImpl {
- private static final FilterCard filter = new FilterCard("an artifact card with converted mana cost 1 or less");
+ private static final FilterCard filter = new FilterCard("artifact card with converted mana cost 1 or less");
static {
filter.add(CardType.ARTIFACT.getPredicate());
diff --git a/Mage.Sets/src/mage/cards/v/VedalkenCertarch.java b/Mage.Sets/src/mage/cards/v/VedalkenCertarch.java
index 1ec8de0648b..332e852c77d 100644
--- a/Mage.Sets/src/mage/cards/v/VedalkenCertarch.java
+++ b/Mage.Sets/src/mage/cards/v/VedalkenCertarch.java
@@ -1,14 +1,12 @@
-
-
package mage.cards.v;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.common.TapTargetEffect;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
@@ -19,9 +17,10 @@ import mage.filter.FilterPermanent;
import mage.filter.predicate.Predicates;
import mage.target.TargetPermanent;
+import java.util.UUID;
+
/**
- *
* @author Loki
*/
public final class VedalkenCertarch extends CardImpl {
@@ -34,22 +33,22 @@ public final class VedalkenCertarch extends CardImpl {
CardType.LAND.getPredicate()));
}
- public VedalkenCertarch (UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}");
+ public VedalkenCertarch(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}");
this.subtype.add(SubType.VEDALKEN);
this.subtype.add(SubType.WIZARD);
-
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// Metalcraft — {T}: Tap target artifact, creature, or land. Activate this ability only if you control three or more artifacts.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new TapSourceCost(), MetalcraftCondition.instance);
- ability.setAbilityWord(AbilityWord.METALCRAFT);
ability.addTarget(new TargetPermanent(filter));
+ ability.setAbilityWord(AbilityWord.METALCRAFT);
+ ability.addHint(MetalcraftHint.instance);
this.addAbility(ability);
}
- public VedalkenCertarch (final VedalkenCertarch card) {
+ public VedalkenCertarch(final VedalkenCertarch card) {
super(card);
}
diff --git a/Mage.Sets/src/mage/cards/v/VedalkenHumiliator.java b/Mage.Sets/src/mage/cards/v/VedalkenHumiliator.java
index 9997b830b2d..573d0f50330 100644
--- a/Mage.Sets/src/mage/cards/v/VedalkenHumiliator.java
+++ b/Mage.Sets/src/mage/cards/v/VedalkenHumiliator.java
@@ -1,6 +1,5 @@
package mage.cards.v;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.TriggeredAbility;
import mage.abilities.common.AttacksTriggeredAbility;
@@ -8,15 +7,18 @@ import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.common.continuous.LoseAllAbilitiesAllEffect;
import mage.abilities.effects.common.continuous.SetPowerToughnessAllEffect;
-import mage.constants.SubType;
+import mage.abilities.hint.common.MetalcraftHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
+import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.Duration;
+import mage.constants.SubType;
import mage.filter.StaticFilters;
+import java.util.UUID;
+
/**
- *
* @author TheElk801
*/
public final class VedalkenHumiliator extends CardImpl {
@@ -44,10 +46,12 @@ public final class VedalkenHumiliator extends CardImpl {
this.addAbility(new ConditionalTriggeredAbility(
ability, MetalcraftCondition.instance,
"Metalcraft — Whenever {this} attacks, "
- + "if you control three or more artifacts, "
- + "creatures your opponents control lose all abilities "
- + "and have base power and toughness 1/1 until end of turn."
- ));
+ + "if you control three or more artifacts, "
+ + "creatures your opponents control lose all abilities "
+ + "and have base power and toughness 1/1 until end of turn.")
+ .setAbilityWord(AbilityWord.METALCRAFT)
+ .addHint(MetalcraftHint.instance)
+ );
}
public VedalkenHumiliator(final VedalkenHumiliator card) {
diff --git a/Mage.Tests/src/test/java/PyromancersGauntletTest.java b/Mage.Tests/src/test/java/PyromancersGauntletTest.java
new file mode 100644
index 00000000000..6e0c6569b80
--- /dev/null
+++ b/Mage.Tests/src/test/java/PyromancersGauntletTest.java
@@ -0,0 +1,117 @@
+
+import mage.constants.PhaseStep;
+import mage.constants.Zone;
+import mage.counters.CounterType;
+import mage.game.GameException;
+import org.junit.Test;
+import org.mage.test.serverside.base.CardTestPlayerBase;
+
+/**
+ *
+ * @author LevelX2
+ */
+public class PyromancersGauntletTest extends CardTestPlayerBase {
+
+ @Test
+ public void basicTest() {
+ setStrictChooseMode(true);
+
+ addCard(Zone.HAND, playerA, "Lightning Bolt", 2);
+ addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2);
+
+ // If a red instant or sorcery spell you control or a red planeswalker you control
+ // would deal damage to a permanent or player, it deals that much damage plus 2 to that permanent or player instead.
+ addCard(Zone.BATTLEFIELD, playerA, "Pyromancer's Gauntlet"); // Artifact {5}
+
+ addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox");
+
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", "Pillarfield Ox");
+
+ setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
+ execute();
+ assertAllCommandsUsed();
+
+ assertLife(playerA, 20);
+ assertLife(playerB, 15); // Bolt 3 + 2
+
+ assertGraveyardCount(playerA, "Lightning Bolt", 2);
+ assertGraveyardCount(playerB, "Pillarfield Ox", 1);
+ }
+
+ @Test
+ public void opponentsPyromancersGauntletAppliedToOwnPlaneswalkerTest() {
+ setStrictChooseMode(true);
+
+ // +1: Elementals you control get +2/+0 until end of turn.
+ // −1: Add {R}{R}.
+ // −2: Chandra, Novice Pyromancer deals 2 damage to any target.
+ addCard(Zone.BATTLEFIELD, playerA, "Chandra, Novice Pyromancer"); // Planeswalker (5) {3}{R}
+
+ // If a red instant or sorcery spell you control or a red planeswalker you control
+ // would deal damage to a permanent or player, it deals that much damage plus 2 to that permanent or player instead.
+ addCard(Zone.BATTLEFIELD, playerB, "Pyromancer's Gauntlet"); // Creature 2/4 {1}{R}{R}{R}
+ addCard(Zone.BATTLEFIELD, playerB, "Chandra, Novice Pyromancer"); // Planeswalker (5) {3}{R}
+
+ addCard(Zone.BATTLEFIELD, playerB, "Barbarian Horde"); // Creature 3/3 {3}{R}
+
+ activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "-2:", playerB);
+
+ attack(2, playerB, "Barbarian Horde");
+ activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "-2:", playerA);
+
+ activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "-2:", "Barbarian Horde");
+
+ setStopAt(3, PhaseStep.BEGIN_COMBAT);
+
+ execute();
+ assertAllCommandsUsed();
+
+ assertLife(playerA, 13); // Attack from Horde 3 + Dmage 2+2 from planeswalker
+ assertLife(playerB, 18); // Damage from planeswalker 2
+
+ assertPermanentCount(playerB, "Barbarian Horde", 1);
+
+ assertCounterCount(playerA, "Chandra, Novice Pyromancer", CounterType.LOYALTY, 1);
+ assertCounterCount(playerB, "Chandra, Novice Pyromancer", CounterType.LOYALTY, 3);
+ }
+
+ @Test
+ public void with3PlayersTest() throws GameException {
+ playerC = createPlayer(currentGame, playerC, "PlayerC");
+
+ setStrictChooseMode(true);
+
+ // +1: Elementals you control get +2/+0 until end of turn.
+ // −1: Add {R}{R}.
+ // −2: Chandra, Novice Pyromancer deals 2 damage to any target.
+ addCard(Zone.BATTLEFIELD, playerA, "Chandra, Novice Pyromancer"); // Planeswalker (5) {3}{R}
+
+ // If a red instant or sorcery spell you control or a red planeswalker you control
+ // would deal damage to a permanent or player, it deals that much damage plus 2 to that permanent or player instead.
+ addCard(Zone.BATTLEFIELD, playerC, "Pyromancer's Gauntlet"); // Creature 2/4 {1}{R}{R}{R}
+ addCard(Zone.BATTLEFIELD, playerB, "Chandra, Novice Pyromancer"); // Planeswalker (5) {3}{R}
+
+ addCard(Zone.BATTLEFIELD, playerB, "Barbarian Horde"); // Creature 3/3 {3}{R}
+
+ activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "-2:", playerB);
+
+ attack(3, playerB, "Barbarian Horde");
+ activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerB, "-2:", playerA);
+
+ activateAbility(4, PhaseStep.PRECOMBAT_MAIN, playerA, "-2:", "Barbarian Horde");
+
+ setStopAt(4, PhaseStep.BEGIN_COMBAT);
+
+ execute();
+ assertAllCommandsUsed();
+
+ assertLife(playerA, 15); // Attack from Horde 3 + Dmage 2 from planeswalker
+ assertLife(playerB, 18); // Damage from planeswalker 2
+ assertLife(playerC, 20);
+ assertPermanentCount(playerB, "Barbarian Horde", 1);
+
+ assertCounterCount(playerA, "Chandra, Novice Pyromancer", CounterType.LOYALTY, 1);
+ assertCounterCount(playerB, "Chandra, Novice Pyromancer", CounterType.LOYALTY, 3);
+ }
+}
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java
index 6dd7e5e3974..9404a4dbfab 100644
--- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/BestowTest.java
@@ -191,7 +191,6 @@ public class BestowTest extends CardTestPlayerBase {
addTarget(playerB, playerA); // Away
addTarget(playerA, "Nyxborn Rollicker");
-
setStrictChooseMode(true);
setStopAt(1, PhaseStep.END_TURN);
execute();
@@ -463,4 +462,26 @@ public class BestowTest extends CardTestPlayerBase {
Assert.assertFalse("The unattached Nighthowler may not have the aura subtype.", nighthowler.getSubtype(currentGame).contains(SubType.AURA));
}
+ @Test
+ public void testCastBestowWithCostReduction() {
+ // Enchantment Creature — Horror
+ // Bestow {5}{G} (If you cast this card for its bestow cost, it's an Aura spell with enchant creature. It becomes a creature again if it's not attached to a creature.)
+ // Trample
+ // Enchanted creature gets +3/+3 and has trample.
+ addCard(Zone.HAND, playerA, "Nylea's Emissary"); // Enchantment Creature
+ addCard(Zone.BATTLEFIELD, playerA, "Forest", 4);
+ addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); // {1}{W} 2/2 creature
+ // Aura spells you cast cost {1} less to cast.
+ addCard(Zone.BATTLEFIELD, playerA, "Transcendent Envoy", 2);
+
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Nylea's Emissary using bestow", "Silvercoat Lion");
+
+ setStopAt(1, PhaseStep.BEGIN_COMBAT);
+ execute();
+
+ assertPermanentCount(playerA, "Nylea's Emissary", 1);
+ assertPowerToughness(playerA, "Silvercoat Lion", 5, 5);
+ assertType("Nylea's Emissary", CardType.CREATURE, false);
+ assertType("Nylea's Emissary", CardType.ENCHANTMENT, SubType.AURA);
+ }
}
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MorphTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MorphTest.java
index 9337b72f3bc..9b4a52df428 100644
--- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MorphTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MorphTest.java
@@ -1089,7 +1089,7 @@ public class MorphTest extends CardTestPlayerBase {
}
@Test
- public void test_MorphWithCostReductionMustBePlayable_MorphCondition() {
+ public void test_MorphWithCostReductionMustBePlayable_MorphCondition1() {
// {1}{U} creature
// Morph {1}{U} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)
// When Willbender is turned face up, change the target of target spell or ability with a single target.
@@ -1110,4 +1110,36 @@ public class MorphTest extends CardTestPlayerBase {
assertPermanentCount(playerA, EmptyNames.FACE_DOWN_CREATURE.toString(), 1);
}
+
+ @Test
+ public void test_MorphWithCostReductionMustBePlayable_MorphCondition2() {
+ // {1}{U} creature
+ // Morph {1}{U} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)
+ // When Willbender is turned face up, change the target of target spell or ability with a single target.
+ addCard(Zone.HAND, playerA, "Willbender", 2);
+ //addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2);
+ //
+ // The first face-down creature spell you cast each turn costs {3} less to cast.
+ addCard(Zone.BATTLEFIELD, playerA, "Kadena, Slinking Sorcerer");
+
+ // creature one - get cost reduce
+ checkPlayableAbility("can", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cast Willbender", true);
+ activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cast Willbender");
+ setChoice(playerA, "Yes"); // morph
+ waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
+
+ // creature two - do not get cost reduce
+ checkPlayableAbility("can't by no reduce", 1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cast Willbender", false);
+
+ // on next turn it can cost reduce again
+ checkPlayableAbility("can't by not your turn", 2, PhaseStep.PRECOMBAT_MAIN, playerA, "Cast Willbender", false);
+ checkPlayableAbility("can", 3, PhaseStep.PRECOMBAT_MAIN, playerA, "Cast Willbender", true);
+
+ setStrictChooseMode(true);
+ setStopAt(3, PhaseStep.END_TURN);
+ execute();
+ assertAllCommandsUsed();
+
+ assertPermanentCount(playerA, EmptyNames.FACE_DOWN_CREATURE.toString(), 1);
+ }
}
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/SatyrFiredancerTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/SatyrFiredancerTest.java
index 26091b38598..779479ecd4f 100644
--- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/SatyrFiredancerTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/SatyrFiredancerTest.java
@@ -1,4 +1,3 @@
-
package org.mage.test.cards.abilities.oneshot.damage;
import mage.constants.PhaseStep;
@@ -11,12 +10,11 @@ import org.mage.test.serverside.base.CardTestPlayerBase;
*
* @author LevelX2
*/
-
public class SatyrFiredancerTest extends CardTestPlayerBase {
@Test
public void testDamageFromInstantToPlayer() {
- // Whenever an instant or sorcery spell you control deals damage to an opponent, Satyr Firedancer deals that much damage to target creature that player controls.
+ // Whenever an instant or sorcery spell you control deals damage to an opponent, Satyr Firedancer deals that much damage to target creature that player controls.
addCard(Zone.BATTLEFIELD, playerA, "Satyr Firedancer");
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1);
addCard(Zone.HAND, playerA, "Lightning Bolt");
@@ -31,20 +29,20 @@ public class SatyrFiredancerTest extends CardTestPlayerBase {
assertLife(playerA, 20);
assertLife(playerB, 17);
-
+
assertGraveyardCount(playerA, "Lightning Bolt", 1);
assertGraveyardCount(playerB, "Silvercoat Lion", 1);
}
@Test
public void testDamageFromAttackWontTrigger() {
- // Whenever an instant or sorcery spell you control deals damage to an opponent, Satyr Firedancer deals that much damage to target creature that player controls.
+ // Whenever an instant or sorcery spell you control deals damage to an opponent, Satyr Firedancer deals that much damage to target creature that player controls.
addCard(Zone.BATTLEFIELD, playerA, "Satyr Firedancer");
addCard(Zone.BATTLEFIELD, playerA, "Pillarfield Ox", 1);
addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion");
- attack(1, playerA, "Pillarfield Ox");
+ attack(1, playerA, "Pillarfield Ox");
addTarget(playerA, "Silvercoat Lion");
setStopAt(1, PhaseStep.END_TURN);
@@ -52,29 +50,28 @@ public class SatyrFiredancerTest extends CardTestPlayerBase {
assertLife(playerA, 20);
assertLife(playerB, 18);
-
+
assertGraveyardCount(playerB, "Silvercoat Lion", 0);
assertPermanentCount(playerB, "Silvercoat Lion", 1);
}
-
@Test
public void testDamageFromOtherCreature() {
- // Whenever an instant or sorcery spell you control deals damage to an opponent, Satyr Firedancer deals that much damage to target creature that player controls.
+ // Whenever an instant or sorcery spell you control deals damage to an opponent, Satyr Firedancer deals that much damage to target creature that player controls.
addCard(Zone.BATTLEFIELD, playerA, "Satyr Firedancer");
// {T}: Prodigal Pyromancer deals 1 damage to any target.
addCard(Zone.BATTLEFIELD, playerA, "Prodigal Pyromancer", 1);
- activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", playerB);
- addTarget(playerA, playerB);
-
+ activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", playerB);
+ addTarget(playerA, playerB);
+
setStopAt(3, PhaseStep.END_TURN);
execute();
assertLife(playerA, 20);
assertLife(playerB, 19);
-
+
}
@Test
@@ -82,6 +79,7 @@ public class SatyrFiredancerTest extends CardTestPlayerBase {
playerC = createPlayer(currentGame, playerC, "PlayerC");
addCard(Zone.BATTLEFIELD, playerA, "Satyr Firedancer", 1);
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2);
+ // Price of Progress deals damage to each player equal to twice the number of nonbasic lands that player controls.
addCard(Zone.HAND, playerA, "Price of Progress", 1);
addCard(Zone.BATTLEFIELD, playerB, "Taiga", 1);
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/AngelOfJubilationTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/AngelOfJubilationTest.java
index 1f3373df032..1c0d53309b0 100644
--- a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/AngelOfJubilationTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/AngelOfJubilationTest.java
@@ -84,7 +84,7 @@ public class AngelOfJubilationTest extends CardTestPlayerBase {
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{2}, Sacrifice a permanent you control: Return target creature to its owner's hand.");
addTarget(playerB, "Angel of Jubilation"); // return to hand
- setChoice(playerB, "Food Chain"); // cacrifice cost
+ setChoice(playerB, "Food Chain"); // sacrifice cost
setStrictChooseMode(true);
setStopAt(1, PhaseStep.END_TURN);
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/mana/TappedForManaRelatedTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/mana/TappedForManaRelatedTest.java
index 9767172efc8..4f5447c6885 100644
--- a/Mage.Tests/src/test/java/org/mage/test/cards/mana/TappedForManaRelatedTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/mana/TappedForManaRelatedTest.java
@@ -240,4 +240,60 @@ public class TappedForManaRelatedTest extends CardTestPlayerBase {
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
assertManaOptions("{Any}", manaOptions);
}
+
+ @Test
+ public void TestEyeOfRamos() {
+ setStrictChooseMode(true);
+ // {T}: Add {U}.
+ // Sacrifice Eye of Ramos: Add {U}.
+ addCard(Zone.BATTLEFIELD, playerA, "Eye of Ramos", 2);
+
+ setStopAt(1, PhaseStep.BEGIN_COMBAT);
+ execute();
+
+ assertAllCommandsUsed();
+
+ ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
+ Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
+ assertManaOptions("{U}{U}{U}{U}", manaOptions);
+ }
+
+ @Test
+ public void TestFarrelitePriest() {
+ setStrictChooseMode(true);
+ // {1}: Add {W}. If this ability has been activated four or more times this turn, sacrifice Farrelite Priest at the beginning of the next end step.
+ addCard(Zone.BATTLEFIELD, playerA, "Farrelite Priest", 1);
+ addCard(Zone.BATTLEFIELD, playerA, "Swamp", 4);
+
+ setStopAt(1, PhaseStep.BEGIN_COMBAT);
+ execute();
+
+ assertAllCommandsUsed();
+
+ ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
+ Assert.assertEquals("mana variations don't fit", 5, manaOptions.size());
+ assertManaOptions("{W}{W}{W}{W}", manaOptions);
+ assertManaOptions("{W}{W}{W}{B}", manaOptions);
+ assertManaOptions("{W}{W}{B}{B}", manaOptions);
+ assertManaOptions("{W}{B}{B}{B}", manaOptions);
+ assertManaOptions("{B}{B}{B}{B}", manaOptions);
+ }
+
+ @Test
+ public void TestMorselhoarder() {
+ setStrictChooseMode(true);
+ // Morselhoarder enters the battlefield with two -1/-1 counters on it.
+ // Remove a -1/-1 counter from Morselhoarder: Add one mana of any color.
+ addCard(Zone.BATTLEFIELD, playerA, "Morselhoarder", 2);
+ addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2);
+
+ setStopAt(1, PhaseStep.BEGIN_COMBAT);
+ execute();
+
+ assertAllCommandsUsed();
+
+ ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
+ Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
+ assertManaOptions("{B}{B}{Any}{Any}{Any}{Any}", manaOptions);
+ }
}
diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/eld/TorbranThaneOfRedFellTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/eld/TorbranThaneOfRedFellTest.java
new file mode 100644
index 00000000000..161b30c8bb2
--- /dev/null
+++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/eld/TorbranThaneOfRedFellTest.java
@@ -0,0 +1,114 @@
+package org.mage.test.cards.single.eld;
+
+import mage.constants.PhaseStep;
+import mage.constants.Zone;
+import mage.counters.CounterType;
+import mage.game.GameException;
+import org.junit.Test;
+import org.mage.test.serverside.base.CardTestPlayerBase;
+
+/**
+ *
+ * @author LevelX2
+ */
+public class TorbranThaneOfRedFellTest extends CardTestPlayerBase {
+
+ @Test
+ public void basicTest() {
+ setStrictChooseMode(true);
+
+ addCard(Zone.HAND, playerA, "Lightning Bolt", 2);
+ addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2);
+ // If a red source you control would deal damage to an opponent or a permanent an opponent controls,
+ // it deals that much damage plus 2 instead.
+ addCard(Zone.BATTLEFIELD, playerA, "Torbran, Thane of Red Fell"); // Creature 2/4 {1}{R}{R}{R}
+
+ addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox");
+
+ attack(1, playerA, "Torbran, Thane of Red Fell");
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", playerB);
+ castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lightning Bolt", "Pillarfield Ox");
+
+ setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
+ execute();
+ assertAllCommandsUsed();
+
+ assertLife(playerA, 20);
+ assertLife(playerB, 11); // damage from: attack 2 + 2 Bolt 3 + 2
+
+ assertGraveyardCount(playerA, "Lightning Bolt", 2);
+ assertGraveyardCount(playerB, "Pillarfield Ox", 1);
+ }
+
+ @Test
+ public void opponentsTornbanAppliedToOwnPlaneswalkerTest() {
+ setStrictChooseMode(true);
+
+ // +1: Elementals you control get +2/+0 until end of turn.
+ // −1: Add {R}{R}.
+ // −2: Chandra, Novice Pyromancer deals 2 damage to any target.
+ addCard(Zone.BATTLEFIELD, playerA, "Chandra, Novice Pyromancer"); // Planeswalker (5) {3}{R}
+
+ // If a red source you control would deal damage to an opponent or a permanent an opponent controls,
+ // it deals that much damage plus 2 instead.
+ addCard(Zone.BATTLEFIELD, playerB, "Torbran, Thane of Red Fell"); // Creature 2/4 {1}{R}{R}{R}
+
+ addCard(Zone.BATTLEFIELD, playerB, "Barbarian Horde"); // Creature 3/3 {3}{R}
+
+ activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "-2:", playerB);
+
+ attack(2, playerB, "Barbarian Horde");
+
+ activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "-2:", "Barbarian Horde");
+
+ setStopAt(3, PhaseStep.BEGIN_COMBAT);
+
+ execute();
+ assertAllCommandsUsed();
+
+ assertLife(playerA, 15); // Attack from Horde 3+2
+ assertLife(playerB, 18); // Damage from planeswalker 2
+
+ assertPermanentCount(playerB, "Barbarian Horde", 1);
+
+ assertCounterCount("Chandra, Novice Pyromancer", CounterType.LOYALTY, 1);
+ }
+
+ @Test
+ public void with3PlayersTest() throws GameException {
+ playerC = createPlayer(currentGame, playerC, "PlayerC");
+ setStrictChooseMode(true);
+
+ // +1: Elementals you control get +2/+0 until end of turn.
+ // −1: Add {R}{R}.
+ // −2: Chandra, Novice Pyromancer deals 2 damage to any target.
+ addCard(Zone.BATTLEFIELD, playerA, "Chandra, Novice Pyromancer"); // Planeswalker (5) {3}{R}
+
+ // If a red source you control would deal damage to an opponent or a permanent an opponent controls,
+ // it deals that much damage plus 2 instead.
+ addCard(Zone.BATTLEFIELD, playerC, "Torbran, Thane of Red Fell"); // Creature 2/4 {1}{R}{R}{R}
+
+ addCard(Zone.BATTLEFIELD, playerB, "Barbarian Horde"); // Creature 3/3 {3}{R}
+ addCard(Zone.BATTLEFIELD, playerB, "Chandra, Novice Pyromancer"); // Planeswalker (5) {3}{R}
+
+ activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "-2:", playerB);
+
+ attack(3, playerB, "Barbarian Horde", playerA);
+ activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerB, "-2:", playerA);
+
+ activateAbility(4, PhaseStep.PRECOMBAT_MAIN, playerA, "-2:", "Barbarian Horde");
+
+ setStopAt(4, PhaseStep.BEGIN_COMBAT);
+
+ execute();
+ assertAllCommandsUsed();
+
+ assertLife(playerA, 15); // Attack from Horde 3+2
+ assertLife(playerB, 18); // Damage from planeswalker 2
+
+ assertPermanentCount(playerB, "Barbarian Horde", 1);
+
+ assertCounterCount(playerA, "Chandra, Novice Pyromancer", CounterType.LOYALTY, 1);
+ assertCounterCount(playerB, "Chandra, Novice Pyromancer", CounterType.LOYALTY, 3);
+ }
+}
diff --git a/Mage/src/main/java/mage/abilities/Ability.java b/Mage/src/main/java/mage/abilities/Ability.java
index d935970d107..24f1083f07c 100644
--- a/Mage/src/main/java/mage/abilities/Ability.java
+++ b/Mage/src/main/java/mage/abilities/Ability.java
@@ -453,7 +453,7 @@ public interface Ability extends Controllable, Serializable {
*
* @param abilityWord
*/
- void setAbilityWord(AbilityWord abilityWord);
+ Ability setAbilityWord(AbilityWord abilityWord);
/**
* Creates the message about the ability casting/triggering/activating to
diff --git a/Mage/src/main/java/mage/abilities/AbilityImpl.java b/Mage/src/main/java/mage/abilities/AbilityImpl.java
index e58033ec892..b71b8d18f28 100644
--- a/Mage/src/main/java/mage/abilities/AbilityImpl.java
+++ b/Mage/src/main/java/mage/abilities/AbilityImpl.java
@@ -8,6 +8,7 @@ import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.Effect;
import mage.abilities.effects.Effects;
import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.ManaEffect;
import mage.abilities.hint.Hint;
import mage.abilities.mana.ActivatedManaAbilityImpl;
import mage.cards.Card;
@@ -34,7 +35,6 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
-import mage.abilities.effects.common.ManaEffect;
/**
* @author BetaSteward_at_googlemail.com
@@ -54,7 +54,7 @@ public abstract class AbilityImpl implements Ability {
protected ManaCosts manaCostsToPay;
protected Costs costs;
protected Costs optionalCosts;
- protected Modes modes; // access to it by GetModes only (it's can be override by some abilities)
+ protected Modes modes; // access to it by GetModes only (it can be overridden by some abilities)
protected Zone zone;
protected String name;
protected AbilityWord abilityWord;
@@ -65,7 +65,7 @@ public abstract class AbilityImpl implements Ability {
protected boolean activated = false;
protected boolean worksFaceDown = false;
protected int sourceObjectZoneChangeCounter;
- protected List watchers = new ArrayList<>(); // access to it by GetWatchers only (it's can be override by some abilities)
+ protected List watchers = new ArrayList<>(); // access to it by GetWatchers only (it can be overridden by some abilities)
protected List subAbilities = null;
protected boolean canFizzle = true;
protected TargetAdjuster targetAdjuster = null;
@@ -1022,8 +1022,9 @@ public abstract class AbilityImpl implements Ability {
}
@Override
- public void setAbilityWord(AbilityWord abilityWord) {
+ public Ability setAbilityWord(AbilityWord abilityWord) {
this.abilityWord = abilityWord;
+ return this;
}
@Override
@@ -1243,10 +1244,13 @@ public abstract class AbilityImpl implements Ability {
}
/**
- * Dynamic cost modification for ability.
- * Example: if it need stack related info (like real targets) then must check two states (game.inCheckPlayableState):
- * 1. In playable state it must check all possible use cases (e.g. allow to reduce on any available target and modes)
- * 2. In real cast state it must check current use case (e.g. real selected targets and modes)
+ * Dynamic cost modification for ability.
+ * Example: if it need stack related info (like real targets) then must
+ * check two states (game.inCheckPlayableState):
+ * 1. In playable state it must check all possible use cases (e.g. allow to
+ * reduce on any available target and modes)
+ * 2. In real cast state it must check current use case (e.g. real selected
+ * targets and modes)
*
* @param costAdjuster
*/
diff --git a/Mage/src/main/java/mage/abilities/effects/common/GainLifeTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/GainLifeTargetEffect.java
index 98210835fbf..25579ab5b68 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/GainLifeTargetEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/GainLifeTargetEffect.java
@@ -1,18 +1,15 @@
-
-
package mage.abilities.effects.common;
-import mage.constants.Outcome;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.OneShotEffect;
+import mage.constants.Outcome;
import mage.game.Game;
import mage.players.Player;
-import java.util.UUID;
-
/**
*
* @author BetaSteward_at_googlemail.com
@@ -42,7 +39,7 @@ public class GainLifeTargetEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
- for (UUID playerId: targetPointer.getTargets(game, source)) {
+ for (UUID playerId : targetPointer.getTargets(game, source)) {
Player player = game.getPlayer(playerId);
if (player != null) {
player.gainLife(life.calculate(game, source, this), game, source);
@@ -59,12 +56,13 @@ public class GainLifeTargetEffect extends OneShotEffect {
StringBuilder sb = new StringBuilder();
String message = life.getMessage();
- if (!mode.getTargets().isEmpty()) {
- sb.append("target ").append(mode.getTargets().get(0).getTargetName());
+ if (!mode.getTargets().isEmpty() && mode.getTargets().get(0).getMaxNumberOfTargets() == Integer.MAX_VALUE) {
+ sb.append("any number of target players each gain ");
+ } else if (!mode.getTargets().isEmpty()) {
+ sb.append("target ").append(mode.getTargets().get(0).getTargetName()).append(" gains ");
} else {
- sb.append("that player");
+ sb.append("that player gains ");
}
- sb.append(" gains ");
if (message.isEmpty() || !message.equals("1")) {
sb.append(life.toString()).append(' ');
}
diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/AbilitiesCostReductionControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/AbilitiesCostReductionControllerEffect.java
index aad1ebcc761..86a4c0de5b7 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/cost/AbilitiesCostReductionControllerEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/cost/AbilitiesCostReductionControllerEffect.java
@@ -18,7 +18,7 @@ import mage.util.CardUtil;
*/
public class AbilitiesCostReductionControllerEffect extends CostModificationEffectImpl {
- private Class activatedAbility;
+ private final Class activatedAbility;
public AbilitiesCostReductionControllerEffect(Class activatedAbility, String activatedAbilityName) {
super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST);
diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/CostModificationSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/CostModificationSourceEffect.java
index c1be451a4c4..607f180aeef 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/cost/CostModificationSourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/cost/CostModificationSourceEffect.java
@@ -10,8 +10,6 @@ import mage.game.Game;
import mage.players.Player;
import mage.util.CardUtil;
-import java.util.UUID;
-
public class CostModificationSourceEffect extends CostModificationEffectImpl {
private final Class extends Ability> abilityType;
diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostReductionForEachSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostReductionForEachSourceEffect.java
index 0719d6aee76..f7c1b9e95df 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostReductionForEachSourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostReductionForEachSourceEffect.java
@@ -18,7 +18,7 @@ import mage.util.CardUtil;
public class SpellCostReductionForEachSourceEffect extends CostModificationEffectImpl {
private final DynamicValue eachAmount;
- private ManaCosts reduceManaCosts;
+ private final ManaCosts reduceManaCosts;
private final int reduceGenericMana;
public SpellCostReductionForEachSourceEffect(int reduceGenericMana, DynamicValue eachAmount) {
@@ -50,7 +50,6 @@ public class SpellCostReductionForEachSourceEffect extends CostModificationEffec
this.staticText = sb.toString();
}
-
protected SpellCostReductionForEachSourceEffect(final SpellCostReductionForEachSourceEffect effect) {
super(effect);
this.eachAmount = effect.eachAmount;
diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostIncreasingAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostIncreasingAllEffect.java
index 9786f8c0778..fdec9bfdd34 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostIncreasingAllEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostIncreasingAllEffect.java
@@ -23,7 +23,7 @@ public class SpellsCostIncreasingAllEffect extends CostModificationEffectImpl {
private final FilterCard filter;
private final TargetController targetController;
private final int increaseGenericCost;
- private ManaCosts increaseManaCosts;
+ private final ManaCosts increaseManaCosts;
public SpellsCostIncreasingAllEffect(int increaseGenericCost, FilterCard filter, TargetController targetController) {
super(Duration.WhileOnBattlefield, Outcome.Detriment, CostModificationType.INCREASE_COST);
diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostModificationThatTargetSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostModificationThatTargetSourceEffect.java
index 3a380982265..3364e3c02ad 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostModificationThatTargetSourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostModificationThatTargetSourceEffect.java
@@ -1,5 +1,7 @@
package mage.abilities.effects.common.cost;
+import java.util.Set;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.constants.CostModificationType;
@@ -12,9 +14,6 @@ import mage.game.stack.Spell;
import mage.players.Player;
import mage.util.CardUtil;
-import java.util.Set;
-import java.util.UUID;
-
/**
* @author JayDi85
*/
@@ -23,7 +22,7 @@ public class SpellsCostModificationThatTargetSourceEffect extends CostModificati
private final FilterCard spellFilter;
private final int modificationAmount;
private String targetName = "{this}";
- private TargetController targetController;
+ private final TargetController targetController;
public SpellsCostModificationThatTargetSourceEffect(int modificationAmount, FilterCard spellFilter, TargetController targetController) {
super(Duration.WhileOnBattlefield, Outcome.Neutral, modificationAmount < 0 ? CostModificationType.REDUCE_COST : CostModificationType.INCREASE_COST);
diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionAllEffect.java
index 5b1dd4811cd..db88ba0bcb2 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionAllEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionAllEffect.java
@@ -1,5 +1,8 @@
package mage.abilities.effects.common.cost;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.UUID;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
@@ -8,16 +11,12 @@ import mage.choices.ChoiceImpl;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.constants.Outcome;
+import mage.constants.SpellAbilityCastMode;
import mage.filter.FilterCard;
import mage.game.Game;
-import mage.game.stack.Spell;
import mage.players.Player;
import mage.util.CardUtil;
-import java.util.LinkedHashSet;
-import java.util.Set;
-import java.util.UUID;
-
/**
* @author LevelX2
*/
@@ -123,15 +122,12 @@ public class SpellsCostReductionAllEffect extends CostModificationEffectImpl {
return false;
}
if (abilityToModify instanceof SpellAbility) {
- Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
- if (spell != null) {
- // real cast with put on stack
- return this.filter.match(spell, game) && selectedByRuntimeData(spell, source, game);
- } else {
- // get playable and other staff without put on stack
- // used at least for flashback ability because Flashback ability doesn't use stack
- Card sourceCard = game.getCard(abilityToModify.getSourceId());
- return sourceCard != null && this.filter.match(sourceCard, game) && selectedByRuntimeData(sourceCard, source, game);
+ Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game);
+ if (spellCard != null) {
+ if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) {
+ spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game);
+ }
+ return this.filter.match(spellCard, game) && selectedByRuntimeData(spellCard, source, game);
}
}
return false;
diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java
index 7fcab94aaf9..2b68bfd19e9 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java
@@ -1,5 +1,7 @@
package mage.abilities.effects.common.cost;
+import java.util.LinkedHashSet;
+import java.util.Set;
import mage.MageObject;
import mage.Mana;
import mage.abilities.Ability;
@@ -11,15 +13,12 @@ import mage.choices.ChoiceImpl;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.constants.Outcome;
+import mage.constants.SpellAbilityCastMode;
import mage.filter.FilterCard;
import mage.game.Game;
-import mage.game.stack.Spell;
import mage.players.Player;
import mage.util.CardUtil;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
/**
* @author North
*/
@@ -114,15 +113,12 @@ public class SpellsCostReductionControllerEffect extends CostModificationEffectI
public boolean applies(Ability abilityToModify, Ability source, Game game) {
if (abilityToModify instanceof SpellAbility) {
if (abilityToModify.isControlledBy(source.getControllerId())) {
- Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
- if (spell != null) {
- // real cast with put on stack
- return this.filter.match(spell, source.getSourceId(), source.getControllerId(), game);
- } else {
- // get playable and other staff without put on stack
- // used at least for flashback ability because Flashback ability doesn't use stack
- Card sourceCard = game.getCard(abilityToModify.getSourceId());
- return sourceCard != null && this.filter.match(sourceCard, source.getSourceId(), source.getControllerId(), game);
+ Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game);;
+ if (spellCard != null) {
+ if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) {
+ spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game);
+ }
+ return this.filter.match(spellCard, source.getSourceId(), source.getControllerId(), game);
}
}
}
diff --git a/Mage/src/main/java/mage/abilities/hint/common/MetalcraftHint.java b/Mage/src/main/java/mage/abilities/hint/common/MetalcraftHint.java
new file mode 100644
index 00000000000..1be7ca62283
--- /dev/null
+++ b/Mage/src/main/java/mage/abilities/hint/common/MetalcraftHint.java
@@ -0,0 +1,34 @@
+package mage.abilities.hint.common;
+
+import mage.abilities.Ability;
+import mage.abilities.condition.common.MetalcraftCondition;
+import mage.abilities.hint.ConditionHint;
+import mage.abilities.hint.Hint;
+import mage.constants.CardType;
+import mage.filter.FilterPermanent;
+import mage.game.Game;
+
+/**
+ * @author JayDi85
+ */
+public enum MetalcraftHint implements Hint {
+
+ instance;
+ private static final ConditionHint hint = new ConditionHint(MetalcraftCondition.instance, "You control three or more artifacts");
+ private static final FilterPermanent filter = new FilterPermanent("artifact");
+
+ static {
+ filter.add(CardType.ARTIFACT.getPredicate());
+ }
+
+ @Override
+ public String getText(Game game, Ability ability) {
+ int amount = game.getBattlefield().countAll(filter, ability.getControllerId(), game);
+ return hint.getText(game, ability) + " (current: " + amount + ")";
+ }
+
+ @Override
+ public Hint copy() {
+ return instance;
+ }
+}
diff --git a/Mage/src/main/java/mage/abilities/keyword/BestowAbility.java b/Mage/src/main/java/mage/abilities/keyword/BestowAbility.java
index 3682e850293..e9ce835df98 100644
--- a/Mage/src/main/java/mage/abilities/keyword/BestowAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/BestowAbility.java
@@ -1,4 +1,3 @@
-
package mage.abilities.keyword;
import mage.MageObject;
@@ -138,6 +137,14 @@ public class BestowAbility extends SpellAbility {
}
}
+
+ static public void becomeAura(Card card) {
+ if (card != null) {
+ card.getSubtype(null).add(SubType.AURA);
+ card.getCardType().remove(CardType.CREATURE);
+ card.getCardType().add(CardType.ENCHANTMENT);
+ }
+ }
}
class BestowEntersBattlefieldEffect extends ReplacementEffectImpl {
diff --git a/Mage/src/main/java/mage/abilities/mana/ActivatedManaAbilityImpl.java b/Mage/src/main/java/mage/abilities/mana/ActivatedManaAbilityImpl.java
index 85eae1ea4a7..ecc635bdaa8 100644
--- a/Mage/src/main/java/mage/abilities/mana/ActivatedManaAbilityImpl.java
+++ b/Mage/src/main/java/mage/abilities/mana/ActivatedManaAbilityImpl.java
@@ -1,5 +1,8 @@
package mage.abilities.mana;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
import mage.Mana;
import mage.abilities.ActivatedAbilityImpl;
import mage.abilities.costs.Cost;
@@ -13,10 +16,6 @@ import mage.game.Game;
import mage.game.stack.Spell;
import mage.game.stack.StackObject;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
/**
* @author BetaSteward_at_googlemail.com
*/
@@ -87,7 +86,7 @@ public abstract class ActivatedManaAbilityImpl extends ActivatedAbilityImpl impl
*/
@Override
public List getNetMana(Game game) {
- if (netMana.isEmpty()) {
+ if (netMana.isEmpty() || (game != null && game.inCheckPlayableState())) {
List dynamicNetMana = new ArrayList<>();
for (Effect effect : getEffects()) {
if (effect instanceof ManaEffect) {
diff --git a/Mage/src/main/java/mage/abilities/mana/ManaOptions.java b/Mage/src/main/java/mage/abilities/mana/ManaOptions.java
index faa011b4a4a..501471adcd9 100644
--- a/Mage/src/main/java/mage/abilities/mana/ManaOptions.java
+++ b/Mage/src/main/java/mage/abilities/mana/ManaOptions.java
@@ -348,26 +348,34 @@ public class ManaOptions extends ArrayList {
private boolean subtractCostAddMana(Mana cost, Mana manaToAdd, boolean onlyManaCosts, Mana currentMana) {
boolean oldManaWasReplaced = false; // true if the newly created mana includes all mana possibilities of the old
boolean repeatable = false;
- if (manaToAdd.getAny() == 1 && manaToAdd.count() == 1 && onlyManaCosts) {
+ if ((manaToAdd.countColored() > 0 || manaToAdd.getAny() > 0) && manaToAdd.count() > 0 && onlyManaCosts) {
// deactivated because it does cause loops TODO: Find reason
repeatable = true; // only replace to any with mana costs only will be repeated if able
}
Mana prevMana = currentMana.copy();
- if (currentMana.includesMana(cost)) { // it can be paid
+ if (currentMana.includesMana(cost)) { // cost can be paid
// generic mana costs can be paid with different colored mana, can lead to different color combinations
if (cost.getGeneric() > 0 && cost.getGeneric() > (currentMana.getGeneric() + currentMana.getColorless())) {
- Mana coloredCost = cost.copy();
- coloredCost.setGeneric(0);
- currentMana.subtract(coloredCost);
for (Mana payCombination : getPossiblePayCombinations(cost.getGeneric(), currentMana)) {
- Mana newMana = currentMana.copy();
- newMana.subtract(payCombination);
- newMana.add(manaToAdd);
- Mana moreValuable = Mana.getMoreValuableMana(prevMana, newMana);
- if (!prevMana.equals(moreValuable)) {
- this.add(newMana);
- if (moreValuable != null) {
- oldManaWasReplaced = true; // the new mana includes all possibilities of the old one
+ Mana currentManaCopy = currentMana.copy();
+ while (currentManaCopy.includesMana(payCombination)) { // loop for multiple usage if possible
+ boolean newCombinations = false;
+
+ Mana newMana = currentManaCopy.copy();
+ newMana.subtract(payCombination);
+ newMana.add(manaToAdd);
+ // Mana moreValuable = Mana.getMoreValuableMana(currentMana, newMana);
+ if (!isExistingManaCombination(newMana)) {
+ this.add(newMana); // add the new combination
+ newCombinations = true; // repeat the while as long there are new combinations and usage is repeatable
+ currentManaCopy = newMana.copy();
+ Mana moreValuable = Mana.getMoreValuableMana(currentMana, newMana);
+ if (!oldManaWasReplaced && newMana.equals(moreValuable)) {
+ oldManaWasReplaced = true; // the new mana includes all possibilities of the old one, so no need to add it after return
+ }
+ }
+ if (!newCombinations || !repeatable) {
+ break;
}
}
@@ -447,6 +455,16 @@ public class ManaOptions extends ArrayList {
return payCombinations;
}
+ private boolean isExistingManaCombination(Mana newMana) {
+ for (Mana mana : this) {
+ Mana moreValuable = Mana.getMoreValuableMana(mana, newMana);
+ if (mana.equals(moreValuable)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private void addManaCombination(Mana mana, Mana existingMana, List payCombinations, List payCombinationsStrings) {
Mana newMana = existingMana.copy();
newMana.add(mana);
@@ -478,4 +496,20 @@ public class ManaOptions extends ArrayList {
}
}
}
+
+ /**
+ * Checks if the given mana (cost) is already included in one available mana
+ * option
+ *
+ * @param mana
+ * @return
+ */
+ public boolean enough(Mana mana) {
+ for (Mana avail : this) {
+ if (mana.enough(avail)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/Mage/src/main/java/mage/constants/SpellAbilityCastMode.java b/Mage/src/main/java/mage/constants/SpellAbilityCastMode.java
index 19bf79cc6b5..9fa3da28629 100644
--- a/Mage/src/main/java/mage/constants/SpellAbilityCastMode.java
+++ b/Mage/src/main/java/mage/constants/SpellAbilityCastMode.java
@@ -1,6 +1,9 @@
-
package mage.constants;
+import mage.abilities.keyword.BestowAbility;
+import mage.cards.Card;
+import mage.game.Game;
+
/**
*
* @author LevelX2
@@ -21,4 +24,12 @@ public enum SpellAbilityCastMode {
public String toString() {
return text;
}
+
+ public Card getTypeModifiedCardObjectCopy(Card card, Game game) {
+ Card cardCopy = card.copy();
+ if (this.equals(BESTOW)) {
+ BestowAbility.becomeAura(cardCopy);
+ }
+ return cardCopy;
+ }
}
diff --git a/Mage/src/main/java/mage/filter/predicate/other/FaceDownCastablePredicate.java b/Mage/src/main/java/mage/filter/predicate/other/FaceDownCastablePredicate.java
new file mode 100644
index 00000000000..e7d3d55f5b3
--- /dev/null
+++ b/Mage/src/main/java/mage/filter/predicate/other/FaceDownCastablePredicate.java
@@ -0,0 +1,24 @@
+package mage.filter.predicate.other;
+
+import mage.abilities.keyword.MorphAbility;
+import mage.cards.Card;
+import mage.filter.predicate.Predicate;
+import mage.game.Game;
+
+/**
+ * @author JayDi85
+ */
+public enum FaceDownCastablePredicate implements Predicate {
+ instance;
+
+ @Override
+ public boolean apply(Card input, Game game) {
+ // is card able to cast as face down
+ return input.getAbilities(game).containsClass(MorphAbility.class);
+ }
+
+ @Override
+ public String toString() {
+ return "Face-down";
+ }
+}
diff --git a/Mage/src/main/java/mage/game/command/planes/FeedingGroundsPlane.java b/Mage/src/main/java/mage/game/command/planes/FeedingGroundsPlane.java
index f60f1517200..553e7ce747e 100644
--- a/Mage/src/main/java/mage/game/command/planes/FeedingGroundsPlane.java
+++ b/Mage/src/main/java/mage/game/command/planes/FeedingGroundsPlane.java
@@ -1,5 +1,7 @@
package mage.game.command.planes;
+import java.util.ArrayList;
+import java.util.List;
import mage.MageObject;
import mage.ObjectColor;
import mage.abilities.Ability;
@@ -29,9 +31,6 @@ import mage.target.common.TargetCreaturePermanent;
import mage.util.CardUtil;
import mage.watchers.common.PlanarRollWatcher;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* @author spjspj
*/
@@ -52,9 +51,9 @@ public class FeedingGroundsPlane extends Plane {
Effect chaosEffect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(), TargetConvertedManaCost.instance);
Target chaosTarget = new TargetCreaturePermanent(1, 1, filter, false);
- List chaosEffects = new ArrayList();
+ List chaosEffects = new ArrayList<>();
chaosEffects.add(chaosEffect);
- List chaosTargets = new ArrayList();
+ List chaosTargets = new ArrayList<>();
chaosTargets.add(chaosTarget);
ActivateIfConditionActivatedAbility chaosAbility = new ActivateIfConditionActivatedAbility(Zone.COMMAND, new RollPlanarDieEffect(chaosEffects, chaosTargets), new GenericManaCost(0), MainPhaseStackEmptyCondition.instance);
diff --git a/Mage/src/main/java/mage/game/command/planes/TurriIslandPlane.java b/Mage/src/main/java/mage/game/command/planes/TurriIslandPlane.java
index 5291caf194d..3f737edfbb1 100644
--- a/Mage/src/main/java/mage/game/command/planes/TurriIslandPlane.java
+++ b/Mage/src/main/java/mage/game/command/planes/TurriIslandPlane.java
@@ -17,7 +17,6 @@ import mage.filter.FilterCard;
import mage.filter.common.FilterCreatureCard;
import mage.game.Game;
import mage.game.command.Plane;
-import mage.game.stack.Spell;
import mage.target.Target;
import mage.util.CardUtil;
import mage.watchers.common.PlanarRollWatcher;
@@ -42,9 +41,9 @@ public class TurriIslandPlane extends Plane {
Effect chaosEffect = new RevealLibraryPutIntoHandEffect(3, new FilterCreatureCard("creature cards"), Zone.GRAVEYARD);
Target chaosTarget = null;
- List chaosEffects = new ArrayList();
+ List chaosEffects = new ArrayList<>();
chaosEffects.add(chaosEffect);
- List chaosTargets = new ArrayList();
+ List chaosTargets = new ArrayList<>();
chaosTargets.add(chaosTarget);
ActivateIfConditionActivatedAbility chaosAbility = new ActivateIfConditionActivatedAbility(Zone.COMMAND, new RollPlanarDieEffect(chaosEffects, chaosTargets), new GenericManaCost(0), MainPhaseStackEmptyCondition.instance);
@@ -110,14 +109,12 @@ class TurriIslandEffect extends CostModificationEffectImpl {
if (!cPlane.getPlaneType().equals(Planes.PLANE_TURRI_ISLAND)) {
return false;
}
-
- Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
- if (spell != null) {
- return filter.match(spell, game) && selectedByRuntimeData(spell, source, game);
- } else {
- // used at least for flashback ability because Flashback ability doesn't use stack
- Card sourceCard = game.getCard(abilityToModify.getSourceId());
- return sourceCard != null && filter.match(sourceCard, game) && selectedByRuntimeData(sourceCard, source, game);
+ Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game);
+ if (spellCard != null) {
+ if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) {
+ spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game);
+ }
+ return filter.match(spellCard, game) && selectedByRuntimeData(spellCard, source, game);
}
}
return false;
diff --git a/Mage/src/main/java/mage/game/stack/StackAbility.java b/Mage/src/main/java/mage/game/stack/StackAbility.java
index 8cd51705616..1060db5318c 100644
--- a/Mage/src/main/java/mage/game/stack/StackAbility.java
+++ b/Mage/src/main/java/mage/game/stack/StackAbility.java
@@ -472,7 +472,7 @@ public class StackAbility extends StackObjImpl implements Ability {
}
@Override
- public void setAbilityWord(AbilityWord abilityWord) {
+ public Ability setAbilityWord(AbilityWord abilityWord) {
throw new UnsupportedOperationException("Not supported.");
}
diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java
index 99d5a6d21ce..4db2e874db4 100644
--- a/Mage/src/main/java/mage/players/PlayerImpl.java
+++ b/Mage/src/main/java/mage/players/PlayerImpl.java
@@ -3156,11 +3156,14 @@ public abstract class PlayerImpl implements Player, Serializable {
sourceObject.adjustCosts(copyAbility, game);
game.getContinuousEffects().costModification(copyAbility, game);
+ // reduced all cost
+ if (copyAbility.getManaCostsToPay().isEmpty()) {
+ return true;
+ }
+
for (Mana mana : copyAbility.getManaCostsToPay().getOptions()) {
- for (Mana avail : availableMana) {
- if (mana.enough(avail)) {
- return true;
- }
+ if (availableMana.enough(mana)) {
+ return true;
}
}
}
@@ -3195,11 +3198,14 @@ public abstract class PlayerImpl implements Player, Serializable {
sourceObject.adjustCosts(copyAbility, game);
game.getContinuousEffects().costModification(copyAbility, game);
+ // reduced all cost
+ if (copyAbility.getManaCostsToPay().isEmpty()) {
+ return true;
+ }
+
for (Mana mana : copyAbility.getManaCostsToPay().getOptions()) {
- for (Mana avail : availableMana) {
- if (mana.enough(avail)) {
- return true;
- }
+ if (availableMana.enough(mana)) {
+ return true;
}
}
}
@@ -3247,7 +3253,7 @@ public abstract class PlayerImpl implements Player, Serializable {
protected ActivatedAbility findActivatedAbilityFromAlternativeSourceCost(MageObject object, ManaOptions availableMana, Ability ability, Game game) {
// return play ability that can activate AlternativeSourceCosts
- if (ability instanceof AlternativeSourceCosts && !(object instanceof Permanent)) {
+ if (ability instanceof AlternativeSourceCosts && object != null && !(object instanceof Permanent)) {
ActivatedAbility playAbility = null;
if (object.isLand()) {
playAbility = (PlayLandAbility) CardUtil.getAbilities(object, game).stream().filter(a -> a instanceof PlayLandAbility).findFirst().orElse(null);
@@ -3263,8 +3269,8 @@ public abstract class PlayerImpl implements Player, Serializable {
// Even mana cost can't be checked here without lookahead
// So make it available all the time
boolean canUse;
- if (ability instanceof MorphAbility) {
- canUse = game.canPlaySorcery(playerId) && ((MorphAbility) ability).isAvailable(playAbility, game);
+ if (ability instanceof MorphAbility && object instanceof Card && game.canPlaySorcery(getId())) {
+ canUse = canPlayCardByAlternateCost((Card) object, availableMana, playAbility, game);
} else {
canUse = canPlay(playAbility, availableMana, object, game); // canPlay already checks alternative source costs and all conditions
}