Revert "Added missing fields to many copy constructors. (#8957)" (#8999)

This reverts commit 82708e4273.

Some of these (AI related result in bloated memory usage, needs more investigation).
This commit is contained in:
Alex Vasile 2022-05-25 12:57:24 -06:00 committed by GitHub
parent 2f3831599d
commit 015cdf3136
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
79 changed files with 597 additions and 811 deletions

View file

@ -85,9 +85,9 @@ public class GameState implements Serializable, Copyable<GameState> {
private Exile exile;
private Battlefield battlefield;
private int turnNum = 1;
private int stepNum;
private UUID turnId;
private boolean extraTurn;
private int stepNum = 0;
private UUID turnId = null;
private boolean extraTurn = false;
private boolean legendaryRuleActive = true;
private boolean gameOver;
private boolean paused;
@ -105,8 +105,8 @@ public class GameState implements Serializable, Copyable<GameState> {
private int permanentOrderNumber;
private final Map<UUID, FilterCreaturePermanent> usePowerInsteadOfToughnessForDamageLethalityFilters = new HashMap<>();
private Set<MageObjectReference> commandersToStay = new HashSet<>(); // commanders that do not go back to command zone
private boolean manaBurn;
private boolean hasDayNight;
private boolean manaBurn = false;
private boolean hasDayNight = false;
private boolean isDaytime = true;
private int applyEffectsCounter; // Upcounting number of each applyEffects execution
@ -157,7 +157,6 @@ public class GameState implements Serializable, Copyable<GameState> {
this.battlefield = state.battlefield.copy();
this.turnNum = state.turnNum;
this.stepNum = state.stepNum;
this.turnId = state.turnId;
this.extraTurn = state.extraTurn;
this.legendaryRuleActive = state.legendaryRuleActive;
this.effects = state.effects.copy();
@ -200,7 +199,6 @@ public class GameState implements Serializable, Copyable<GameState> {
this.commandersToStay.addAll(state.commandersToStay);
this.hasDayNight = state.hasDayNight;
this.isDaytime = state.isDaytime;
this.manaBurn = state.manaBurn;
}
public void clearOnGameRestart() {

View file

@ -39,7 +39,6 @@ public abstract class GameTinyLeadersImpl extends GameImpl {
public GameTinyLeadersImpl(final GameTinyLeadersImpl game) {
super(game);
this.alsoHand = game.alsoHand;
this.alsoLibrary = game.alsoLibrary;
this.startingPlayerSkipsDraw = game.startingPlayerSkipsDraw;
}
@ -51,37 +50,35 @@ public abstract class GameTinyLeadersImpl extends GameImpl {
// move tiny leader to command zone
for (UUID playerId : state.getPlayerList(startingPlayerId)) {
Player player = getPlayer(playerId);
if (player == null) {
continue;
}
String commanderName = player.getMatchPlayer().getDeck().getName();
Card commander = findCommander(this, player, commanderName);
if (commander != null) {
// already exists - just move to zone (example: game restart by Karn Liberated)
commander.moveToZone(Zone.COMMAND, null, this, true);
} else {
// create new commander
commander = getCommanderCard(commanderName, player.getId());
if (player != null) {
String commanderName = player.getMatchPlayer().getDeck().getName();
Card commander = findCommander(this, player, commanderName);
if (commander != null) {
Set<Card> cards = new HashSet<>();
cards.add(commander);
this.loadCards(cards, playerId);
player.addCommanderId(commander.getId());
// already exists - just move to zone (example: game restart by Karn Liberated)
commander.moveToZone(Zone.COMMAND, null, this, true);
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new InfoEffect("Commander effects"));
ability.addEffect(new CommanderReplacementEffect(commander.getId(), alsoHand, alsoLibrary, false, "Commander"));
ability.addEffect(new CommanderCostModification(commander));
// Commander rule #4 was removed Jan. 18, 2016
// ability.addEffect(new CommanderManaReplacementEffect(player.getId(), CardUtil.getColorIdentity(commander)));
CommanderInfoWatcher watcher = new CommanderInfoWatcher("Commander", commander.getId(), false);
getState().addWatcher(watcher);
watcher.addCardInfoToCommander(this);
this.getState().addAbility(ability, null);
} else {
// GameWorker.call processing errors and write it in magediag.log by defalt
// Test use case: create tiny game with random generated deck - game freezes with empty battlefield
throw new IllegalStateException("Commander card could not be created. Name: [" + player.getMatchPlayer().getDeck().getName() + ']');
// create new commander
commander = getCommanderCard(commanderName, player.getId());
if (commander != null) {
Set<Card> cards = new HashSet<>();
cards.add(commander);
this.loadCards(cards, playerId);
player.addCommanderId(commander.getId());
commander.moveToZone(Zone.COMMAND, null, this, true);
Ability ability = new SimpleStaticAbility(Zone.COMMAND, new InfoEffect("Commander effects"));
ability.addEffect(new CommanderReplacementEffect(commander.getId(), alsoHand, alsoLibrary, false, "Commander"));
ability.addEffect(new CommanderCostModification(commander));
// Commander rule #4 was removed Jan. 18, 2016
// ability.addEffect(new CommanderManaReplacementEffect(player.getId(), CardUtil.getColorIdentity(commander)));
CommanderInfoWatcher watcher = new CommanderInfoWatcher("Commander", commander.getId(), false);
getState().addWatcher(watcher);
watcher.addCardInfoToCommander(this);
this.getState().addAbility(ability, null);
} else {
// GameWorker.call processing errors and write it in magediag.log by defalt
// Test use case: create tiny game with random generated deck - game freezes with empty battlefield
throw new IllegalStateException("Commander card could not be created. Name: [" + player.getMatchPlayer().getDeck().getName() + ']');
}
}
}
}

View file

@ -73,9 +73,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
protected boolean morphed = false;
protected int classLevel = 1;
protected final Set<UUID> goadingPlayers = new HashSet<>();
// The UUID of the controller under who the permanent first entered the battelfield under.
protected UUID originalControllerId;
// The UUID of the current controller.
protected UUID controllerId;
protected UUID beforeResetControllerId;
protected int damage;
@ -131,7 +129,6 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
this.flipped = permanent.flipped;
this.originalControllerId = permanent.originalControllerId;
this.controllerId = permanent.controllerId;
this.beforeResetControllerId = permanent.controllerId;
this.damage = permanent.damage;
this.controlledFromStartOfControllerTurn = permanent.controlledFromStartOfControllerTurn;
this.turnsOnBattlefield = permanent.turnsOnBattlefield;
@ -144,9 +141,11 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
this.deathtouched = permanent.deathtouched;
this.markedLifelink = permanent.markedLifelink;
this.connectedCards.putAll(permanent.connectedCards);
for (Map.Entry<String, List<UUID>> entry : permanent.connectedCards.entrySet()) {
this.connectedCards.put(entry.getKey(), entry.getValue());
}
if (permanent.dealtDamageByThisTurn != null) {
this.dealtDamageByThisTurn = new HashSet<>(permanent.dealtDamageByThisTurn);
dealtDamageByThisTurn = new HashSet<>(permanent.dealtDamageByThisTurn);
}
if (permanent.markedDamage != null) {
markedDamage = new ArrayList<>();
@ -172,7 +171,6 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
this.bandedCards.addAll(permanent.bandedCards);
this.timesLoyaltyUsed = permanent.timesLoyaltyUsed;
this.transformCount = permanent.transformCount;
this.removedFromCombat = permanent.removedFromCombat;
this.morphed = permanent.morphed;
this.manifested = permanent.manifested;
@ -195,14 +193,6 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
abilities.setControllerId(controllerId);
}
/**
* Used to override the original controller of a permanent to be different than the player who cast the spell
* or activated the ability.
*
* E.g. Xantcha, Sleeper Agent. Who enters the battlefield directly under someone else's control.
*
* @param originalControllerId The UUID of the original controller of the permanent
*/
@Override
public void setOriginalControllerId(UUID originalControllerId) {
this.originalControllerId = originalControllerId;
@ -774,7 +764,6 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
@Override
public boolean checkControlChanged(Game game) {
// TODO Put a break point and see what's going on with controllerID, beforeResetControllerID, and originalControllerID
if (!controllerId.equals(beforeResetControllerId)) {
this.removeFromCombat(game);
this.controlledFromStartOfControllerTurn = false;
@ -915,7 +904,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
* @return
*/
private int doDamage(int damageAmount, UUID attackerId, Ability source, Game game, boolean preventable, boolean combat, boolean markDamage, List<UUID> appliedEffects) {
int damageDone;
int damageDone = 0;
if (damageAmount < 1 || !canDamage(game.getObject(attackerId), game)) {
return 0;
}
@ -1769,22 +1758,20 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
public boolean moveToZone(Zone toZone, Ability source, Game game, boolean flag, List<UUID> appliedEffects) {
Zone fromZone = game.getState().getZone(objectId);
Player controller = game.getPlayer(controllerId);
if (controller == null) {
return false;
if (controller != null) {
ZoneChangeEvent event = new ZoneChangeEvent(this, source, controllerId, fromZone, toZone, appliedEffects);
ZoneChangeInfo zoneChangeInfo;
if (toZone == Zone.LIBRARY) {
zoneChangeInfo = new ZoneChangeInfo.Library(event, flag /* put on top */);
} else {
zoneChangeInfo = new ZoneChangeInfo(event);
}
boolean successfullyMoved = ZonesHandler.moveCard(zoneChangeInfo, game, source);
//20180810 - 701.3d
detachAllAttachments(game);
return successfullyMoved;
}
ZoneChangeEvent event = new ZoneChangeEvent(this, source, controllerId, fromZone, toZone, appliedEffects);
ZoneChangeInfo zoneChangeInfo;
if (toZone == Zone.LIBRARY) {
zoneChangeInfo = new ZoneChangeInfo.Library(event, flag /* put on top */);
} else {
zoneChangeInfo = new ZoneChangeInfo(event);
}
boolean successfullyMoved = ZonesHandler.moveCard(zoneChangeInfo, game, source);
//20180810 - 701.3d
detachAllAttachments(game);
return successfullyMoved;
return false;
}
@Override

View file

@ -81,7 +81,6 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
this.expansionSetCodeChecked = token.expansionSetCodeChecked;
this.copySourceCard = token.copySourceCard; // will never be changed
this.availableImageSetCodes = token.availableImageSetCodes;
this.tokenDescriptor = token.tokenDescriptor;
}
@Override

View file

@ -30,7 +30,6 @@ public class SpellStack extends ArrayDeque<StackObject> {
for (StackObject spell : stack) {
this.addLast(spell.copy());
}
this.dateLastAdded = stack.dateLastAdded;
}
//resolve top StackObject