mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-12 08:48:39 +00:00
CardTraitChanges: as Record
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
package forge.game.card;
|
package forge.game.card;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import forge.game.replacement.ReplacementEffect;
|
import forge.game.replacement.ReplacementEffect;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.game.staticability.StaticAbility;
|
import forge.game.staticability.StaticAbility;
|
||||||
@@ -8,74 +7,45 @@ import forge.game.trigger.Trigger;
|
|||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class CardTraitChanges implements Cloneable {
|
public record CardTraitChanges(Collection<SpellAbility> abilities, Collection<SpellAbility> removedAbilities,
|
||||||
|
Collection<Trigger> triggers, Collection<ReplacementEffect> replacements, Collection<StaticAbility> staticAbilities,
|
||||||
private List<Trigger> triggers = Lists.newArrayList();
|
|
||||||
private List<ReplacementEffect> replacements = Lists.newArrayList();
|
|
||||||
private List<SpellAbility> abilities = Lists.newArrayList();
|
|
||||||
private List<StaticAbility> staticAbilities = Lists.newArrayList();
|
|
||||||
|
|
||||||
private List<SpellAbility> removedAbilities = Lists.newArrayList();
|
|
||||||
|
|
||||||
private boolean removeAll = false;
|
|
||||||
private boolean removeNonMana = false;
|
|
||||||
|
|
||||||
public CardTraitChanges(Collection<SpellAbility> spells, Collection<SpellAbility> removedAbilities,
|
|
||||||
Collection<Trigger> trigger, Collection<ReplacementEffect> res, Collection<StaticAbility> st,
|
|
||||||
boolean removeAll, boolean removeNonMana) {
|
boolean removeAll, boolean removeNonMana) {
|
||||||
if (spells != null) {
|
|
||||||
this.abilities.addAll(spells);
|
|
||||||
}
|
|
||||||
if (removedAbilities != null) {
|
|
||||||
this.removedAbilities.addAll(removedAbilities);
|
|
||||||
}
|
|
||||||
if (trigger != null) {
|
|
||||||
this.triggers.addAll(trigger);
|
|
||||||
}
|
|
||||||
if (res != null) {
|
|
||||||
this.replacements.addAll(res);
|
|
||||||
}
|
|
||||||
if (st != null) {
|
|
||||||
this.staticAbilities.addAll(st);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.removeAll |= removeAll;
|
|
||||||
this.removeNonMana |= removeNonMana;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the triggers
|
* @return the triggers
|
||||||
*/
|
*/
|
||||||
public Collection<Trigger> getTriggers() {
|
public Collection<Trigger> getTriggers() {
|
||||||
return triggers;
|
return Objects.requireNonNullElse(triggers, List.of());
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @return the replacements
|
* @return the replacements
|
||||||
*/
|
*/
|
||||||
public Collection<ReplacementEffect> getReplacements() {
|
public Collection<ReplacementEffect> getReplacements() {
|
||||||
return replacements;
|
return Objects.requireNonNullElse(replacements, List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the abilities
|
* @return the abilities
|
||||||
*/
|
*/
|
||||||
public Collection<SpellAbility> getAbilities() {
|
public Collection<SpellAbility> getAbilities() {
|
||||||
return abilities;
|
return Objects.requireNonNullElse(abilities, List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the abilities
|
* @return the abilities
|
||||||
*/
|
*/
|
||||||
public Collection<SpellAbility> getRemovedAbilities() {
|
public Collection<SpellAbility> getRemovedAbilities() {
|
||||||
return removedAbilities;
|
return Objects.requireNonNullElse(removedAbilities, List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the staticAbilities
|
* @return the staticAbilities
|
||||||
*/
|
*/
|
||||||
public Collection<StaticAbility> getStaticAbilities() {
|
public Collection<StaticAbility> getStaticAbilities() {
|
||||||
return staticAbilities;
|
return Objects.requireNonNullElse(staticAbilities, List.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isRemoveAll() {
|
public boolean isRemoveAll() {
|
||||||
@@ -87,53 +57,30 @@ public class CardTraitChanges implements Cloneable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public CardTraitChanges copy(Card host, boolean lki) {
|
public CardTraitChanges copy(Card host, boolean lki) {
|
||||||
try {
|
return new CardTraitChanges(
|
||||||
CardTraitChanges result = (CardTraitChanges) super.clone();
|
this.getAbilities().stream().map(sa -> sa.copy(host, lki)).collect(Collectors.toList()),
|
||||||
|
this.getRemovedAbilities().stream().map(sa -> sa.copy(host, lki)).collect(Collectors.toList()),
|
||||||
result.abilities = Lists.newArrayList();
|
this.getTriggers().stream().map(tr -> tr.copy(host, lki)).collect(Collectors.toList()),
|
||||||
for (SpellAbility sa : this.abilities) {
|
this.getReplacements().stream().map(tr -> tr.copy(host, lki)).collect(Collectors.toList()),
|
||||||
result.abilities.add(sa.copy(host, lki));
|
this.getStaticAbilities().stream().map(st -> st.copy(host, lki)).collect(Collectors.toList()),
|
||||||
}
|
removeAll, removeNonMana
|
||||||
result.removedAbilities = Lists.newArrayList();
|
);
|
||||||
for (SpellAbility sa : this.removedAbilities) {
|
|
||||||
result.removedAbilities.add(sa.copy(host, lki));
|
|
||||||
}
|
|
||||||
|
|
||||||
result.triggers = Lists.newArrayList();
|
|
||||||
for (Trigger tr : this.triggers) {
|
|
||||||
result.triggers.add(tr.copy(host, lki));
|
|
||||||
}
|
|
||||||
|
|
||||||
result.replacements = Lists.newArrayList();
|
|
||||||
for (ReplacementEffect re : this.replacements) {
|
|
||||||
result.replacements.add(re.copy(host, lki));
|
|
||||||
}
|
|
||||||
|
|
||||||
result.staticAbilities = Lists.newArrayList();
|
|
||||||
for (StaticAbility sa : this.staticAbilities) {
|
|
||||||
result.staticAbilities.add(sa.copy(host, lki));
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
} catch (final Exception ex) {
|
|
||||||
throw new RuntimeException("CardTraitChanges : clone() error", ex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeText() {
|
public void changeText() {
|
||||||
for (SpellAbility sa : this.abilities) {
|
for (SpellAbility sa : this.getAbilities()) {
|
||||||
sa.changeText();
|
sa.changeText();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Trigger tr : this.triggers) {
|
for (Trigger tr : this.getTriggers()) {
|
||||||
tr.changeText();
|
tr.changeText();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ReplacementEffect re : this.replacements) {
|
for (ReplacementEffect re : this.getReplacements()) {
|
||||||
re.changeText();
|
re.changeText();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (StaticAbility sa : this.staticAbilities) {
|
for (StaticAbility sa : this.getStaticAbilities()) {
|
||||||
sa.changeText();
|
sa.changeText();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user