mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
Fix tracking Commander in play when your commander is a (M)DFC.
Fixes #7530, #7637, #7699, #7773
This commit is contained in:
parent
4f88266893
commit
531768491c
1 changed files with 29 additions and 2 deletions
|
|
@ -5,6 +5,8 @@ import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.MageObject;
|
import mage.MageObject;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
|
import mage.cards.DoubleFacedCard;
|
||||||
|
import mage.cards.DoubleFacedCardHalf;
|
||||||
import mage.constants.WatcherScope;
|
import mage.constants.WatcherScope;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.DamagedPlayerEvent;
|
import mage.game.events.DamagedPlayerEvent;
|
||||||
|
|
@ -36,7 +38,11 @@ public class CommanderInfoWatcher extends Watcher {
|
||||||
@Override
|
@Override
|
||||||
public void watch(GameEvent event, Game game) {
|
public void watch(GameEvent event, Game game) {
|
||||||
if (checkCommanderDamage && event.getType() == GameEvent.EventType.DAMAGED_PLAYER && event instanceof DamagedPlayerEvent) {
|
if (checkCommanderDamage && event.getType() == GameEvent.EventType.DAMAGED_PLAYER && event instanceof DamagedPlayerEvent) {
|
||||||
if (sourceId.equals(event.getSourceId())) {
|
Card sourceCard = game.getCard(event.getSourceId());
|
||||||
|
if (sourceCard instanceof DoubleFacedCardHalf) {
|
||||||
|
sourceCard = ((DoubleFacedCardHalf) sourceCard).getParentCard();
|
||||||
|
}
|
||||||
|
if (sourceId.equals(sourceCard.getId())) {
|
||||||
DamagedPlayerEvent damageEvent = (DamagedPlayerEvent) event;
|
DamagedPlayerEvent damageEvent = (DamagedPlayerEvent) event;
|
||||||
if (damageEvent.isCombatDamage()) {
|
if (damageEvent.isCombatDamage()) {
|
||||||
UUID playerUUID = event.getTargetId();
|
UUID playerUUID = event.getTargetId();
|
||||||
|
|
@ -44,7 +50,7 @@ public class CommanderInfoWatcher extends Watcher {
|
||||||
damage += damageEvent.getAmount();
|
damage += damageEvent.getAmount();
|
||||||
damageToPlayer.put(playerUUID, damage);
|
damageToPlayer.put(playerUUID, damage);
|
||||||
Player player = game.getPlayer(playerUUID);
|
Player player = game.getPlayer(playerUUID);
|
||||||
MageObject commander = game.getObject(sourceId);
|
MageObject commander = game.getObject(event.getSourceId());
|
||||||
if (player != null && commander != null) {
|
if (player != null && commander != null) {
|
||||||
if (!game.isSimulation()) {
|
if (!game.isSimulation()) {
|
||||||
game.informPlayers(commander.getLogName() + " did " + damage + " combat damage to " + player.getLogName() + " during the game.");
|
game.informPlayers(commander.getLogName() + " did " + damage + " combat damage to " + player.getLogName() + " during the game.");
|
||||||
|
|
@ -62,8 +68,15 @@ public class CommanderInfoWatcher extends Watcher {
|
||||||
|
|
||||||
public void addCardInfoToCommander(Game game) {
|
public void addCardInfoToCommander(Game game) {
|
||||||
MageObject object = game.getPermanent(sourceId);
|
MageObject object = game.getPermanent(sourceId);
|
||||||
|
MageObject leftObject = null;
|
||||||
|
MageObject rightObject = null;
|
||||||
if (object == null) {
|
if (object == null) {
|
||||||
object = game.getCard(sourceId);
|
object = game.getCard(sourceId);
|
||||||
|
if (object instanceof DoubleFacedCard) {
|
||||||
|
DoubleFacedCard cardObject = (DoubleFacedCard)object;
|
||||||
|
leftObject = game.getPermanent(cardObject.getLeftHalfCard().getId());
|
||||||
|
rightObject = game.getPermanent(cardObject.getRightHalfCard().getId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (object != null) {
|
if (object != null) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
@ -74,6 +87,12 @@ public class CommanderInfoWatcher extends Watcher {
|
||||||
sb.append(' ').append(playsCount).append(playsCount == 1 ? " time" : " times").append(" played from the command zone.");
|
sb.append(' ').append(playsCount).append(playsCount == 1 ? " time" : " times").append(" played from the command zone.");
|
||||||
}
|
}
|
||||||
this.addInfoToObject(object, "Commander", sb.toString(), game);
|
this.addInfoToObject(object, "Commander", sb.toString(), game);
|
||||||
|
if (leftObject != null) {
|
||||||
|
this.addInfoToObject(leftObject, "Commander", sb.toString(), game);
|
||||||
|
}
|
||||||
|
if (rightObject != null) {
|
||||||
|
this.addInfoToObject(rightObject, "Commander", sb.toString(), game);
|
||||||
|
}
|
||||||
|
|
||||||
if (checkCommanderDamage) {
|
if (checkCommanderDamage) {
|
||||||
for (Map.Entry<UUID, Integer> entry : damageToPlayer.entrySet()) {
|
for (Map.Entry<UUID, Integer> entry : damageToPlayer.entrySet()) {
|
||||||
|
|
@ -81,6 +100,14 @@ public class CommanderInfoWatcher extends Watcher {
|
||||||
sb.append("<b>").append(commanderTypeName).append("</b> did ").append(entry.getValue()).append(" combat damage to player ").append(damagedPlayer.getLogName()).append('.');
|
sb.append("<b>").append(commanderTypeName).append("</b> did ").append(entry.getValue()).append(" combat damage to player ").append(damagedPlayer.getLogName()).append('.');
|
||||||
this.addInfoToObject(object, "Commander" + entry.getKey(),
|
this.addInfoToObject(object, "Commander" + entry.getKey(),
|
||||||
"<b>" + commanderTypeName + "</b> did " + entry.getValue() + " combat damage to player " + damagedPlayer.getLogName() + '.', game);
|
"<b>" + commanderTypeName + "</b> did " + entry.getValue() + " combat damage to player " + damagedPlayer.getLogName() + '.', game);
|
||||||
|
if (leftObject != null) {
|
||||||
|
this.addInfoToObject(leftObject, "Commander" + entry.getKey(),
|
||||||
|
"<b>" + commanderTypeName + "</b> did " + entry.getValue() + " combat damage to player " + damagedPlayer.getLogName() + '.', game);
|
||||||
|
}
|
||||||
|
if (rightObject != null) {
|
||||||
|
this.addInfoToObject(object, "Commander" + entry.getKey(),
|
||||||
|
"<b>" + commanderTypeName + "</b> did " + entry.getValue() + " combat damage to player " + damagedPlayer.getLogName() + '.', game);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue