diff --git a/forge-game/src/main/java/forge/game/GameLogFormatter.java b/forge-game/src/main/java/forge/game/GameLogFormatter.java index ca3eaa56d5c..2a2c60eb227 100644 --- a/forge-game/src/main/java/forge/game/GameLogFormatter.java +++ b/forge-game/src/main/java/forge/game/GameLogFormatter.java @@ -304,8 +304,7 @@ public class GameLogFormatter extends IGameEventVisitor.Base { @Override public GameLogEntry visit(GameEventCardForetold ev) { - String sb = TextUtil.concatWithSpace(ev.activatingPlayer.toString(), "has foretold."); - return new GameLogEntry(GameLogEntryType.STACK_RESOLVE, sb); + return new GameLogEntry(GameLogEntryType.STACK_RESOLVE, ev.toString()); } @Override @@ -313,6 +312,11 @@ public class GameLogFormatter extends IGameEventVisitor.Base { return new GameLogEntry(GameLogEntryType.STACK_RESOLVE, ev.toString()); } + @Override + public GameLogEntry visit(GameEventDoorChanged ev) { + return new GameLogEntry(GameLogEntryType.STACK_RESOLVE, ev.toString()); + } + @Subscribe public void recieve(GameEvent ev) { GameLogEntry le = ev.visit(this); diff --git a/forge-game/src/main/java/forge/game/ability/effects/AlterAttributeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AlterAttributeEffect.java index f581e44dca2..75c734bdc36 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AlterAttributeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AlterAttributeEffect.java @@ -8,6 +8,7 @@ import forge.game.ability.AbilityKey; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; import forge.game.card.CardCollection; +import forge.game.event.GameEventCardPlotted; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.trigger.TriggerType; @@ -48,6 +49,8 @@ public class AlterAttributeEffect extends SpellAbilityEffect { switch (attr.trim()) { case "Plotted": altered = gameCard.setPlotted(activate); + + c.getGame().fireEvent(new GameEventCardPlotted(c, sa.getActivatingPlayer())); break; case "Solve": case "Solved": 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 ab40f0e8c09..45bad7a17a6 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -8181,6 +8181,8 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr updateRooms(); + getGame().fireEvent(new GameEventDoorChanged(p, this, stateName, true)); + Map unlockParams = AbilityKey.mapFromPlayer(p); unlockParams.put(AbilityKey.Card, this); unlockParams.put(AbilityKey.CardState, getState(stateName)); @@ -8205,6 +8207,8 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr updateRooms(); + getGame().fireEvent(new GameEventDoorChanged(p, this, stateName, false)); + return true; } diff --git a/forge-game/src/main/java/forge/game/event/GameEventCardForetold.java b/forge-game/src/main/java/forge/game/event/GameEventCardForetold.java index 64f24031e2a..b7003036045 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventCardForetold.java +++ b/forge-game/src/main/java/forge/game/event/GameEventCardForetold.java @@ -19,6 +19,6 @@ public class GameEventCardForetold extends GameEvent { */ @Override public String toString() { - return activatingPlayer.getName() + " has foretold a card."; + return activatingPlayer.getName() + " has foretold."; } } diff --git a/forge-game/src/main/java/forge/game/event/GameEventDoorChanged.java b/forge-game/src/main/java/forge/game/event/GameEventDoorChanged.java new file mode 100644 index 00000000000..5f04cf5a7de --- /dev/null +++ b/forge-game/src/main/java/forge/game/event/GameEventDoorChanged.java @@ -0,0 +1,39 @@ +package forge.game.event; + +import forge.card.CardStateName; +import forge.game.card.Card; +import forge.game.player.Player; +import forge.util.CardTranslation; +import forge.util.Lang; + +public class GameEventDoorChanged extends GameEvent { + public final Player activatingPlayer; + public final Card card; + public final CardStateName state; + public boolean unlock; + + public GameEventDoorChanged(Player player, Card c, CardStateName state, boolean unlock) { + activatingPlayer = player; + card = c; + this.state = state; + this.unlock = unlock; + } + + @Override + public T visit(IGameEventVisitor visitor) { + return visitor.visit(this); + } + + @Override + public String toString() { + String doorName = CardTranslation.getTranslatedName(card.getState(state)); + + StringBuilder sb = new StringBuilder(); + sb.append(activatingPlayer); + sb.append(" "); + sb.append(unlock ? "unlocks" : "locks"); + sb.append(" "); + sb.append(Lang.getInstance().getPossessedObject(doorName, "Door")); + return sb.toString(); + } +} diff --git a/forge-game/src/main/java/forge/game/event/IGameEventVisitor.java b/forge-game/src/main/java/forge/game/event/IGameEventVisitor.java index 159eb2836da..f07f5bb031a 100644 --- a/forge-game/src/main/java/forge/game/event/IGameEventVisitor.java +++ b/forge-game/src/main/java/forge/game/event/IGameEventVisitor.java @@ -60,6 +60,7 @@ public interface IGameEventVisitor { T visit(GameEventCardForetold event); T visit(GameEventCardPlotted event); T visit(GameEventDayTimeChanged event); + T visit(GameEventDoorChanged event); // This is base class for all visitors. class Base implements IGameEventVisitor{ @@ -118,5 +119,6 @@ public interface IGameEventVisitor { public T visit(GameEventCardForetold event) { return null; } public T visit(GameEventCardPlotted event) { return null; } public T visit(GameEventDayTimeChanged event) { return null; } + public T visit(GameEventDoorChanged event) { return null; } } }