CardTraitChanges: as Record

This commit is contained in:
Hans Mackowiak
2025-08-30 10:44:01 +02:00
parent 01d5bf3c21
commit 1efddc9a92

View File

@@ -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();
} }
} }