diff --git a/core/src/mindustry/entities/comp/StatusComp.java b/core/src/mindustry/entities/comp/StatusComp.java index 56b7559455..4d3dd11dd0 100644 --- a/core/src/mindustry/entities/comp/StatusComp.java +++ b/core/src/mindustry/entities/comp/StatusComp.java @@ -73,6 +73,7 @@ abstract class StatusComp implements Posc, Flyingc{ } void clearStatuses(){ + statuses.each(e -> e.effect.onRemoved(self())); statuses.clear(); } @@ -80,6 +81,7 @@ abstract class StatusComp implements Posc, Flyingc{ void unapply(StatusEffect effect){ statuses.remove(e -> { if(e.effect == effect){ + e.effect.onRemoved(self()); Pools.free(e); return true; } @@ -189,6 +191,10 @@ abstract class StatusComp implements Posc, Flyingc{ entry.time = Math.max(entry.time - Time.delta, 0); if(entry.effect == null || (entry.time <= 0 && !entry.effect.permanent)){ + if(entry.effect != null){ + entry.effect.onRemoved(self()); + } + Pools.free(entry); index --; statuses.remove(index); diff --git a/core/src/mindustry/type/StatusEffect.java b/core/src/mindustry/type/StatusEffect.java index 4ffb7a6183..2e79ed00e7 100644 --- a/core/src/mindustry/type/StatusEffect.java +++ b/core/src/mindustry/type/StatusEffect.java @@ -142,6 +142,11 @@ public class StatusEffect extends UnlockableContent{ } } + /** Called when status effect is removed. */ + public void onRemoved(Unit unit){ + + } + protected void trans(StatusEffect effect, TransitionHandler handler){ transitions.put(effect, handler); }