diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index f801fe7ddf..15a8dd550c 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -699,7 +699,34 @@ public class ContentParser{ read(() -> readFields(liquid, value)); return liquid; }, - ContentType.status, parser(ContentType.status, StatusEffect::new), + ContentType.status, (TypeParser)(mod, name, value) -> { + StatusEffect status; + if(locate(ContentType.status, name) != null){ + status = locate(ContentType.status, name); + readBundle(ContentType.status, name, value); + }else{ + readBundle(ContentType.status, name, value); + status = new StatusEffect(mod + "-" + name); + } + currentContent = status; + read(() -> readFields(status, value)); + + status.init(() -> { + var oldOpposite = status.opposites.copy(); + status.opposites.clear(); + status.opposite(oldOpposite.toSeq().toArray(StatusEffect.class)); + + var oldAffinities = status.affinities.copy(); + status.affinities.clear(); + for(StatusEffect affinity: oldAffinities){ + status.affinity(affinity, (unit, result, time) -> { + unit.damagePierce(status.transitionDamage); + }); + } + }); + + return status; + }, ContentType.sector, (TypeParser)(mod, name, value) -> { if(value.isString()){ return locate(ContentType.sector, name); diff --git a/core/src/mindustry/type/StatusEffect.java b/core/src/mindustry/type/StatusEffect.java index f4e0d3b9c6..c66cff2cbb 100644 --- a/core/src/mindustry/type/StatusEffect.java +++ b/core/src/mindustry/type/StatusEffect.java @@ -176,13 +176,13 @@ public class StatusEffect extends UnlockableContent{ transitions.put(effect, handler); } - protected void affinity(StatusEffect effect, TransitionHandler handler){ + public void affinity(StatusEffect effect, TransitionHandler handler){ affinities.add(effect); effect.affinities.add(this); trans(effect, handler); } - protected void opposite(StatusEffect... effect){ + public void opposite(StatusEffect... effect){ for(var other : effect){ handleOpposite(other); other.handleOpposite(this);