diff --git a/forge-game/src/main/java/forge/game/GameEntity.java b/forge-game/src/main/java/forge/game/GameEntity.java index fe1313ab5da..af132c5359e 100644 --- a/forge-game/src/main/java/forge/game/GameEntity.java +++ b/forge-game/src/main/java/forge/game/GameEntity.java @@ -218,6 +218,17 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { return false; } + @Override + public final boolean equals(Object o) { + if (o == null) { return false; } + return o.hashCode() == id && o.getClass().equals(getClass()); + } + + @Override + public final int hashCode() { + return id; + } + @Override public String toString() { return name; diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index a2b7d039646..3c969f04212 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -3078,11 +3078,6 @@ public class Card extends GameEntity implements Comparable, IIdentifiable /** {@inheritDoc} */ @Override public final int compareTo(final Card that) { - /* - * Return a negative integer of this < that, a positive integer if this - * > that, and zero otherwise. - */ - if (that == null) { /* * "Here we can arbitrarily decide that all non-null Cards are @@ -3090,20 +3085,9 @@ public class Card extends GameEntity implements Comparable, IIdentifiable * return in this case, as long as it is consistent. I rather think * of null as being lowly." --Braids */ - return +1; - } else if (id > that.id) { - return +1; - } else if (id < that.id) { - return -1; - } else { - return 0; + return 1; } - } - - /** {@inheritDoc} */ - @Override - public final int hashCode() { - return id; + return Integer.compare(id, that.id); } /** {@inheritDoc} */ diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 988e97e5b9f..fd74f074f92 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -2005,34 +2005,12 @@ public class Player extends GameEntity implements Comparable { mustAttackEntity = o; } - /** {@inheritDoc} */ - @Override - public final boolean equals(final Object o) { - if (o instanceof Player) { - final Player p1 = (Player) o; - return p1.getName().equals(getName()); - } else { - return false; - } - } - @Override public int compareTo(Player o) { if (o == null) { - return +1; + return 1; } - int subtractedHash = o.hashCode() - hashCode(); - if (subtractedHash == 0) { - return 0; - } - - return Math.abs(subtractedHash) / subtractedHash; - } - - /** {@inheritDoc} */ - @Override - public int hashCode() { - return (41 * (41 + getName().hashCode())); + return getName().compareTo(o.getName()); } public static class Predicates { diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index a74635908bf..eca64051e1a 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -285,23 +285,21 @@ public class TriggerHandler { // NAPs for (Player nap : game.getPlayers()) { - if (!nap.equals(playerAP)) + if (!nap.equals(playerAP)) { checkStatics |= runNonStaticTriggersForPlayer(nap, mode, runParams, delayedTriggersWorkingCopy); + } } - return checkStatics; } private boolean runNonStaticTriggersForPlayer(final Player player, final TriggerType mode, final Map runParams, final ArrayList delayedTriggersWorkingCopy ) { - - boolean checkStatics = false; Card card = null; - for (final Trigger t : activeTriggers) { - if (!t.isStatic() && t.getHostCard().getController().equals(player) - && canRunTrigger(t, mode, runParams)) { + boolean checkStatics = false; + for (final Trigger t : activeTriggers) { + if (!t.isStatic() && t.getHostCard().getController().equals(player) && canRunTrigger(t, mode, runParams)) { if (runParams.containsKey("Card")) { card = (Card) runParams.get("Card"); if (runParams.containsKey("Destination") && !ZoneType.Battlefield.name().equals(runParams.get("Destination"))) { @@ -352,11 +350,9 @@ public class TriggerHandler { if (!regtrig.requirementsCheck(game)) { return false; // Conditions aren't right. } - return true; } - private boolean canRunTrigger(final Trigger regtrig, final TriggerType mode, final Map runParams) { if (regtrig.getMode() != mode) { return false; // Not the right mode. @@ -395,8 +391,7 @@ public class TriggerHandler { } // Torpor Orb check return true; } - - + // Checks if the conditions are right for a single trigger to go off, and // runs it if so. // Return true if the trigger went off, false otherwise. @@ -419,7 +414,8 @@ public class TriggerHandler { if (trigCard != null && (host.getId() == trigCard.getId())) { host = trigCard; - } else { + } + else { host = game.getCardState(regtrig.getHostCard()); } @@ -431,7 +427,8 @@ public class TriggerHandler { public void resolve() { } }; - } else { + } + else { sa = AbilityFactory.getAbility(host.getSVar(triggerParams.get("Execute")), host); } } @@ -494,7 +491,8 @@ public class TriggerHandler { if (regtrig.isStatic()) { wrapperAbility.getActivatingPlayer().getController().playTrigger(host, wrapperAbility, isMandatory); - } else { + } + else { game.getStack().addSimultaneousStackEntry(wrapperAbility); } regtrig.setTriggeredSA(wrapperAbility); @@ -503,7 +501,8 @@ public class TriggerHandler { if (regtrig.getHostCard().isImmutable()) { Player p = regtrig.getHostCard().getController(); p.getZone(ZoneType.Command).remove(regtrig.getHostCard()); - } else { + } + else { regtrig.getHostCard().removeTrigger(regtrig); } } diff --git a/forge-game/src/main/java/forge/trackable/TrackableObject.java b/forge-game/src/main/java/forge/trackable/TrackableObject.java index a17dcbc8759..8ef8fb5acb4 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableObject.java +++ b/forge-game/src/main/java/forge/trackable/TrackableObject.java @@ -53,6 +53,12 @@ public abstract class TrackableObject implements IIdentifiable { return id; } + @Override + public final boolean equals(Object o) { + if (o == null) { return false; } + return o.hashCode() == id && o.getClass().equals(getClass()); + } + @SuppressWarnings("unchecked") protected T get(TrackableProperty key) { T value = (T)props.get(key);