* Added logic to add permitting object to play/cast events.

This commit is contained in:
LevelX2 2018-05-27 23:47:57 +02:00
parent b97a443a37
commit 27ced167fb
124 changed files with 1095 additions and 964 deletions

View file

@ -31,6 +31,7 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import mage.MageObjectReference;
import mage.constants.Zone;
/**
@ -48,6 +49,7 @@ public class GameEvent implements Serializable {
protected String data;
protected Zone zone;
protected List<UUID> appliedEffects = new ArrayList<>();
protected MageObjectReference reference; // e.g. the permitting object for casting a spell from non hand zone
protected UUID customEventType = null;
public enum EventType {
@ -232,7 +234,7 @@ public class GameEvent implements Serializable {
FLIP_COIN, COIN_FLIPPED, SCRY, FATESEAL,
ROLL_DICE, DICE_ROLLED,
ROLL_PLANAR_DIE, PLANAR_DIE_ROLLED,
PLANESWALK, PLANESWALKED,
PLANESWALK, PLANESWALKED,
PAID_CUMULATIVE_UPKEEP,
DIDNT_PAY_CUMULATIVE_UPKEEP,
//permanent events
@ -334,21 +336,14 @@ public class GameEvent implements Serializable {
CUSTOM_EVENT
}
private GameEvent(EventType type, UUID customEventType,
UUID targetId, UUID sourceId, UUID playerId, int amount, boolean flag) {
this.type = type;
this.customEventType = customEventType;
this.targetId = targetId;
this.sourceId = sourceId;
this.amount = amount;
this.playerId = playerId;
this.flag = flag;
}
public GameEvent(EventType type, UUID targetId, UUID sourceId, UUID playerId) {
this(type, null, targetId, sourceId, playerId, 0, false);
}
public GameEvent(EventType type, UUID targetId, UUID sourceId, UUID playerId, MageObjectReference reference) {
this(type, null, targetId, sourceId, playerId, 0, false, reference);
}
public GameEvent(EventType type, UUID targetId, UUID sourceId, UUID playerId, int amount, boolean flag) {
this(type, null, targetId, sourceId, playerId, amount, flag);
}
@ -369,6 +364,10 @@ public class GameEvent implements Serializable {
return new GameEvent(type, targetId, sourceId, playerId);
}
public static GameEvent getEvent(EventType type, UUID targetId, UUID sourceId, UUID playerId, MageObjectReference reference) {
return new GameEvent(type, targetId, sourceId, playerId, reference);
}
public static GameEvent getEvent(EventType type, UUID targetId, UUID playerId) {
return new GameEvent(type, targetId, null, playerId);
}
@ -399,6 +398,23 @@ public class GameEvent implements Serializable {
return event;
}
private GameEvent(EventType type, UUID customEventType,
UUID targetId, UUID sourceId, UUID playerId, int amount, boolean flag) {
this(type, customEventType, targetId, sourceId, playerId, amount, flag, null);
}
private GameEvent(EventType type, UUID customEventType,
UUID targetId, UUID sourceId, UUID playerId, int amount, boolean flag, MageObjectReference reference) {
this.type = type;
this.customEventType = customEventType;
this.targetId = targetId;
this.sourceId = sourceId;
this.amount = amount;
this.playerId = playerId;
this.flag = flag;
this.reference = reference;
}
public EventType getType() {
return type;
}
@ -455,6 +471,14 @@ public class GameEvent implements Serializable {
this.zone = zone;
}
public MageObjectReference getAdditionalReference() {
return reference;
}
public void setAdditionalReference(MageObjectReference additionalReference) {
this.reference = additionalReference;
}
/**
* used to store which replacement effects were already applied to an event
* or or any modified events that may replace it