Merge branch 'turns' into 'master'

Update advanceToNextPhase logic

See merge request core-developers/forge!4633
This commit is contained in:
Michael Kamensky
2021-05-01 17:36:38 +00:00

View File

@@ -162,6 +162,8 @@ public class PhaseHandler implements java.io.Serializable {
boolean isTopsy = playerTurn.getAmountOfKeyword("The phases of your turn are reversed.") % 2 == 1;
boolean turnEnded = false;
game.getStack().clearUndoStack(); //can't undo action from previous phase
if (bRepeatCleanup) { // for when Cleanup needs to repeat itself
bRepeatCleanup = false;
}
@@ -184,32 +186,6 @@ public class PhaseHandler implements java.io.Serializable {
setPhase(PhaseType.getNext(phase, isTopsy));
}
// Replacement effects
final Map<AbilityKey, Object> repRunParams = AbilityKey.mapFromAffected(playerTurn);
repRunParams.put(AbilityKey.Phase, phase.nameForScripts);
ReplacementResult repres = game.getReplacementHandler().run(ReplacementType.BeginPhase, repRunParams);
if (repres != ReplacementResult.NotReplaced) {
// Currently there is no effect to skip entire beginning phase
// If in the future that kind of effect is added, need to handle it too.
// Handle skipping of entire combat phase
if (phase == PhaseType.COMBAT_BEGIN) {
setPhase(PhaseType.COMBAT_END);
}
advanceToNextPhase();
return;
}
if (extraPhase != null) {
for (Trigger deltrig : extraPhase.getDelayedTriggers()) {
game.getTriggerHandler().registerThisTurnDelayedTrigger(deltrig);
}
}
}
game.getStack().clearUndoStack(); //can't undo action from previous phase
String phaseType = oldPhase == phase ? "Repeat" : phase == PhaseType.getNext(oldPhase, isTopsy) ? "" : "Additional";
if (turnEnded) {
turn++;
extraPhases.clear();
@@ -232,6 +208,29 @@ public class PhaseHandler implements java.io.Serializable {
//update tokens
game.fireEvent(new GameEventTokenStateUpdate(playerTurn.getTokensInPlay()));
// Replacement effects
final Map<AbilityKey, Object> repRunParams = AbilityKey.mapFromAffected(playerTurn);
repRunParams.put(AbilityKey.Phase, phase.nameForScripts);
ReplacementResult repres = game.getReplacementHandler().run(ReplacementType.BeginPhase, repRunParams);
if (repres != ReplacementResult.NotReplaced) {
// Currently there is no effect to skip entire beginning phase
// If in the future that kind of effect is added, need to handle it too.
// Handle skipping of entire combat phase
if (phase == PhaseType.COMBAT_BEGIN) {
setPhase(PhaseType.COMBAT_END);
}
advanceToNextPhase();
return;
}
if (extraPhase != null) {
for (Trigger deltrig : extraPhase.getDelayedTriggers()) {
game.getTriggerHandler().registerThisTurnDelayedTrigger(deltrig);
}
}
}
String phaseType = oldPhase == phase ? "Repeat" : phase == PhaseType.getNext(oldPhase, isTopsy) ? "" : "Additional";
game.fireEvent(new GameEventTurnPhase(playerTurn, phase, phaseType));
}