diff --git a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.form b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.form index 1481b6aeb8..4028425331 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.form @@ -426,6 +426,7 @@ + diff --git a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java index 1007492696..77125fcc67 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java @@ -287,6 +287,7 @@ public class ConnectDialog extends MageDialog { btnFindUs.setToolTipText("Connect to mtg.powersofwar.com (USA, use any username without registration)"); btnFindUs.setActionCommand("connectXmageus"); btnFindUs.setAlignmentY(0.0F); + btnFindUs.setEnabled(false); btnFindUs.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnFindUs.setName("connectXmageusBtn"); // NOI18N btnFindUs.setPreferredSize(new java.awt.Dimension(23, 23)); diff --git a/Mage.Client/src/main/java/mage/client/util/gui/countryBox/CountryComboBox.java b/Mage.Client/src/main/java/mage/client/util/gui/countryBox/CountryComboBox.java index 92247592aa..3fb930e2b1 100644 --- a/Mage.Client/src/main/java/mage/client/util/gui/countryBox/CountryComboBox.java +++ b/Mage.Client/src/main/java/mage/client/util/gui/countryBox/CountryComboBox.java @@ -194,7 +194,7 @@ public class CountryComboBox extends JComboBox { {"Portugal", "pt"}, {"Puerto Rico", "pr"}, {"Qatar", "qa"}, - {"Réunion", "re"}, + {"Reunion", "re"}, {"Romania", "ro"}, {"Russian Federation", "ru"}, {"Rwanda", "rw"}, diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java index e38898760f..b8c9e2b65b 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java @@ -290,7 +290,7 @@ public enum GrabbagImageSource implements CardImageSource { singleLinks.put("SWS/Senator Bail Organa", "BRkUuYU.jpg"); singleLinks.put("SWS/Senator Lott Dod", "yYQtXZo.jpg"); singleLinks.put("SWS/Senator Onaconda Farr", "oPez77z.png"); - singleLinks.put("SWS/Senator Padmé Amidala", "287deD9.jpg"); + singleLinks.put("SWS/Senator Padme Amidala", "287deD9.jpg"); singleLinks.put("SWS/Senator Passel Argente", "51qpnaE.jpg"); singleLinks.put("SWS/Shaak Herd", "PtnZD0I.jpg"); singleLinks.put("SWS/Shadow Trooper", "09NAiGa.jpg"); diff --git a/Mage.Common/src/main/java/mage/utils/MageVersion.java b/Mage.Common/src/main/java/mage/utils/MageVersion.java index 858c0dc6eb..291f1cae20 100644 --- a/Mage.Common/src/main/java/mage/utils/MageVersion.java +++ b/Mage.Common/src/main/java/mage/utils/MageVersion.java @@ -13,7 +13,7 @@ public class MageVersion implements Serializable, Comparable { public static final int MAGE_VERSION_MINOR = 4; public static final int MAGE_VERSION_PATCH = 35; public static final String MAGE_EDITION_INFO = ""; // set "-beta" for 1.4.32-betaV0 - public static final String MAGE_VERSION_MINOR_PATCH = "V5"; // default + public static final String MAGE_VERSION_MINOR_PATCH = "V6"; // default // strict mode private static final boolean MAGE_VERSION_MINOR_PATCH_MUST_BE_SAME = true; // set true on uncompatible github changes, set false after new major release (after MAGE_VERSION_PATCH changes) diff --git a/Mage.Sets/src/mage/cards/a/ArmoryAutomaton.java b/Mage.Sets/src/mage/cards/a/ArmoryAutomaton.java index f4fe5b25bb..f56d6acc10 100644 --- a/Mage.Sets/src/mage/cards/a/ArmoryAutomaton.java +++ b/Mage.Sets/src/mage/cards/a/ArmoryAutomaton.java @@ -88,7 +88,9 @@ class ArmoryAutomatonEffect extends OneShotEffect { while (player.canRespond() && countBattlefield > 0 && player.chooseUse(Outcome.Benefit, "Select and attach a target Equipment?", source, game)) { Target targetEquipment = new TargetPermanent(currentFilter); targetEquipment.setRequired(false); - if (player.choose(Outcome.Benefit, targetEquipment, source.getSourceId(), game)) { + if (player.choose(Outcome.Benefit, targetEquipment, source.getSourceId(), game) && targetEquipment.getFirstTarget() != null) { + currentFilter.add(Predicates.not(new PermanentIdPredicate(targetEquipment.getFirstTarget()))); // exclude selected for next time + Permanent aura = game.getPermanent(targetEquipment.getFirstTarget()); if (aura != null) { Permanent attachedTo = game.getPermanent(aura.getAttachedTo()); @@ -96,10 +98,9 @@ class ArmoryAutomatonEffect extends OneShotEffect { attachedTo.removeAttachment(aura.getId(), game); } sourcePermanent.addAttachment(aura.getId(), game); - - // exclude selected - currentFilter.add(Predicates.not(new PermanentIdPredicate(aura.getId()))); } + } else { + break; } countBattlefield = game.getBattlefield().getAllActivePermanents(currentFilter, game).size(); } diff --git a/Mage.Sets/src/mage/cards/f/FrayingOmnipotence.java b/Mage.Sets/src/mage/cards/f/FrayingOmnipotence.java index fb3bbc6bb4..6afdf6a92f 100644 --- a/Mage.Sets/src/mage/cards/f/FrayingOmnipotence.java +++ b/Mage.Sets/src/mage/cards/f/FrayingOmnipotence.java @@ -82,7 +82,7 @@ class FrayingOmnipotenceEffect extends OneShotEffect { player.discard(cardsToDiscard, false, source, game); } } - // then sacrifices half of the creatures they controls, + // then sacrifices half of the creatures they control, for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); if (player == null) { diff --git a/Mage.Sets/src/mage/cards/f/FrenziedFugue.java b/Mage.Sets/src/mage/cards/f/FrenziedFugue.java index 016fe16e59..e5e5b410ed 100644 --- a/Mage.Sets/src/mage/cards/f/FrenziedFugue.java +++ b/Mage.Sets/src/mage/cards/f/FrenziedFugue.java @@ -1,7 +1,5 @@ - package mage.cards.f; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; @@ -13,11 +11,7 @@ import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.HasteAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; +import mage.constants.*; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; @@ -25,6 +19,8 @@ import mage.game.permanent.Permanent; import mage.target.TargetPermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** * @author LevelX2 */ @@ -77,8 +73,9 @@ class FrenziedFugueTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { + this.getEffects().clear(); boolean result; - if (event.getType()==EventType.ENTERS_THE_BATTLEFIELD) { + if (event.getType() == EventType.ENTERS_THE_BATTLEFIELD) { result = event.getTargetId().equals(this.getSourceId()); } else { result = event.getPlayerId().equals(this.getControllerId()); @@ -88,13 +85,13 @@ class FrenziedFugueTriggeredAbility extends TriggeredAbilityImpl { if (enchantment != null && enchantment.getAttachedTo() != null) { Effect effect = new GainControlTargetEffect(Duration.EndOfTurn, true); effect.setTargetPointer(new FixedTarget(enchantment.getAttachedTo(), game)); - getEffects().add(effect); + this.getEffects().add(effect); effect = new UntapTargetEffect(); effect.setTargetPointer(new FixedTarget(enchantment.getAttachedTo(), game)); - getEffects().add(effect); + this.getEffects().add(effect); effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); effect.setTargetPointer(new FixedTarget(enchantment.getAttachedTo(), game)); - getEffects().add(effect); + this.getEffects().add(effect); } else { result = false; } diff --git a/Mage.Sets/src/mage/cards/o/OrimsPrayer.java b/Mage.Sets/src/mage/cards/o/OrimsPrayer.java index 61a6a42b8d..53eb06d5f0 100644 --- a/Mage.Sets/src/mage/cards/o/OrimsPrayer.java +++ b/Mage.Sets/src/mage/cards/o/OrimsPrayer.java @@ -1,6 +1,5 @@ package mage.cards.o; -import java.util.UUID; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.common.GainLifeEffect; import mage.cards.CardImpl; @@ -13,8 +12,9 @@ import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.UUID; + /** - * * @author L_J */ public final class OrimsPrayer extends CardImpl { @@ -37,7 +37,7 @@ public final class OrimsPrayer extends CardImpl { } class OrimsPrayerTriggeredAbility extends TriggeredAbilityImpl { - + int numberAttackingController = 0; public OrimsPrayerTriggeredAbility() { @@ -73,8 +73,8 @@ class OrimsPrayerTriggeredAbility extends TriggeredAbilityImpl { applied = true; } } - if (applied - && numberAttackingController > 0) { + if (applied && numberAttackingController > 0) { + this.getEffects().clear(); this.getEffects().add(new GainLifeEffect(numberAttackingController)); } return applied; diff --git a/Mage.Sets/src/mage/cards/u/UginTheIneffable.java b/Mage.Sets/src/mage/cards/u/UginTheIneffable.java index 18a511fffa..3a6d1670c7 100644 --- a/Mage.Sets/src/mage/cards/u/UginTheIneffable.java +++ b/Mage.Sets/src/mage/cards/u/UginTheIneffable.java @@ -1,15 +1,20 @@ package mage.cards.u; +import mage.MageObject; import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.LoyaltyAbility; import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.AsThoughEffectImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.InfoEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; import mage.cards.Card; import mage.cards.CardImpl; @@ -27,13 +32,11 @@ import mage.game.permanent.token.UginTheIneffableToken; import mage.players.Player; import mage.target.TargetPermanent; import mage.target.targetpointer.FixedTarget; +import mage.util.CardUtil; + import java.util.HashSet; import java.util.Set; import java.util.UUID; -import mage.abilities.effects.AsThoughEffectImpl; -import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.InfoEffect; -import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import static mage.constants.Outcome.Benefit; @@ -101,20 +104,31 @@ class UginTheIneffableEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); Player player = game.getPlayer(source.getControllerId()); - if (player == null) { + MageObject sourceObject = source.getSourceObject(game); + if (player == null || sourceObject == null) { return false; } + Card card = player.getLibrary().getFromTop(game); - player.lookAtCards(sourcePermanent.getIdName(), card, game); - player.moveCards(card, Zone.EXILED, source, game); - card.turnFaceDown(game, source.getControllerId()); + if (card == null) { + return false; + } + + // exile and look + UUID exileZoneId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); + if (player.moveCardsToExile(card, source, game, false, exileZoneId, sourceObject.getIdName() + " (" + player.getName() + ")")) { + card.turnFaceDown(game, source.getControllerId()); + player.lookAtCards(player.getName() + " - " + card.getIdName() + " - " + CardUtil.sdf.format(System.currentTimeMillis()), card, game); + } + + // create token Set tokenObjs = new HashSet<>(); CreateTokenEffect effect = new CreateTokenEffect(new UginTheIneffableToken()); effect.apply(game, source); - for (UUID addedTokenId : effect.getLastAddedTokenIds()) { + // with return ability + for (UUID addedTokenId : effect.getLastAddedTokenIds()) { // display referenced exiled face-down card on token SimpleStaticAbility sa = new SimpleStaticAbility(Zone.BATTLEFIELD, new InfoEffect("Referenced object: " + card.getId().toString().substring(0, 3))); diff --git a/Mage.Sets/src/mage/sets/StarWars.java b/Mage.Sets/src/mage/sets/StarWars.java index 01f57bf33b..2ebff3c3f8 100644 --- a/Mage.Sets/src/mage/sets/StarWars.java +++ b/Mage.Sets/src/mage/sets/StarWars.java @@ -290,7 +290,7 @@ public final class StarWars extends ExpansionSet { cards.add(new SetCardInfo("Senator Bail Organa", 209, Rarity.UNCOMMON, mage.cards.s.SenatorBailOrgana.class)); cards.add(new SetCardInfo("Senator Lott Dod", 210, Rarity.UNCOMMON, mage.cards.s.SenatorLottDod.class)); cards.add(new SetCardInfo("Senator Onaconda Farr", 211, Rarity.UNCOMMON, mage.cards.s.SenatorOnacondaFarr.class)); - cards.add(new SetCardInfo("Senator Padmé Amidala", 212, Rarity.UNCOMMON, mage.cards.s.SenatorPadmeAmidala.class)); + cards.add(new SetCardInfo("Senator Padme Amidala", 212, Rarity.UNCOMMON, mage.cards.s.SenatorPadmeAmidala.class)); cards.add(new SetCardInfo("Senator Passel Argente", 213, Rarity.UNCOMMON, mage.cards.s.SenatorPasselArgente.class)); cards.add(new SetCardInfo("Shaak Herd", 155, Rarity.COMMON, mage.cards.s.ShaakHerd.class)); cards.add(new SetCardInfo("Shadow Trooper", 56, Rarity.COMMON, mage.cards.s.ShadowTrooper.class)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouUnlessPayManaAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouUnlessPayManaAllEffect.java index ca59b00414..8ea0b7a313 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouUnlessPayManaAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouUnlessPayManaAllEffect.java @@ -36,7 +36,7 @@ public class CantAttackYouUnlessPayManaAllEffect extends PayCostToAttackBlockEff + (payAlsoForAttackingPlaneswalker ? "or a planeswalker you control " : "") + "unless their controller pays " + (manaCosts == null ? "" : manaCosts.getText()) - + " for each creature they controls that's attacking you"; + + " for each creature they control that's attacking you"; } public CantAttackYouUnlessPayManaAllEffect(final CantAttackYouUnlessPayManaAllEffect effect) { diff --git a/Mage/src/main/java/mage/cards/decks/CardNameUtil.java b/Mage/src/main/java/mage/cards/decks/CardNameUtil.java index 0389aa8774..53700b7e12 100644 --- a/Mage/src/main/java/mage/cards/decks/CardNameUtil.java +++ b/Mage/src/main/java/mage/cards/decks/CardNameUtil.java @@ -15,6 +15,8 @@ public class CardNameUtil { .replace("í", "i") .replace("â", "a") .replace("á", "a") + .replace("à", "a") + .replace("é", "e") .replace("ú", "u") .replace("\"", "'"); } diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index 59c93e2ab1..a2d57f858c 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -2874,7 +2874,7 @@ public abstract class GameImpl implements Game, Serializable { player.addCommanderId(card.getId()); // no needs in initCommander call -- it's uses on game startup (init) } - } else { + } else if (!command.isEmpty()) { throw new IllegalArgumentException("Command zone supports in commander test games"); } diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index 9df46c83ea..dce0116701 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -67,7 +67,6 @@ import mage.util.RandomUtil; import org.apache.log4j.Logger; import java.io.Serializable; -import java.text.SimpleDateFormat; import java.util.*; import java.util.Map.Entry; @@ -75,8 +74,6 @@ public abstract class PlayerImpl implements Player, Serializable { private static final Logger logger = Logger.getLogger(PlayerImpl.class); - private static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); - /** * Used to cancel waiting requests send to the player */ @@ -3471,7 +3468,7 @@ public abstract class PlayerImpl implements Player, Serializable { String lookNo = abilitiesToActivate > 0 ? "No, activate ability" : "No"; if (chooseUse(Outcome.Benefit, lookMessage, "", lookYes, lookNo, null, game)) { Cards cards = new CardsImpl(card); - this.lookAtCards(getName() + " - " + sdf.format(System.currentTimeMillis()), cards, game); + this.lookAtCards(getName() + " - " + card.getIdName() + " - " + CardUtil.sdf.format(System.currentTimeMillis()), cards, game); return true; } } diff --git a/Mage/src/main/java/mage/util/CardUtil.java b/Mage/src/main/java/mage/util/CardUtil.java index 94d2da8d54..851d83c8de 100644 --- a/Mage/src/main/java/mage/util/CardUtil.java +++ b/Mage/src/main/java/mage/util/CardUtil.java @@ -14,6 +14,7 @@ import mage.game.permanent.Permanent; import mage.game.permanent.token.Token; import mage.util.functions.CopyTokenFunction; +import java.text.SimpleDateFormat; import java.util.UUID; /** @@ -29,6 +30,8 @@ public final class CardUtil { static final String[] ordinalStrings = {"first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eightth", "ninth", "tenth", "eleventh", "twelfth", "thirteenth", "fourteenth", "fifteenth", "sixteenth", "seventeenth", "eighteenth", "nineteenth", "twentieth"}; + public static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); + /** * Increase spell or ability cost to be paid. *