diff --git a/core/src/mindustry/entities/comp/PayloadComp.java b/core/src/mindustry/entities/comp/PayloadComp.java index 0fedb3054b..e9587fbd56 100644 --- a/core/src/mindustry/entities/comp/PayloadComp.java +++ b/core/src/mindustry/entities/comp/PayloadComp.java @@ -52,13 +52,11 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{ } for(Payload pay : payloads){ - //apparently BasedUser doesn't want this and several plugins use it - //if(pay instanceof BuildPayload build){ - // build.build.team = team; - //} pay.set(x, y, rotation); pay.update(self(), null); } + //remove dead payloads after they explode + payloads.removeAll(Payload::isDead); } @Override diff --git a/core/src/mindustry/world/blocks/payloads/BuildPayload.java b/core/src/mindustry/world/blocks/payloads/BuildPayload.java index 22d1b21bff..007762ab5a 100644 --- a/core/src/mindustry/world/blocks/payloads/BuildPayload.java +++ b/core/src/mindustry/world/blocks/payloads/BuildPayload.java @@ -38,6 +38,11 @@ public class BuildPayload implements Payload{ build.dropped(); } + @Override + public boolean isDead(){ + return build.dead; + } + @Override public boolean contentEquals(Payload other){ return other instanceof BuildPayload bp && bp.block() == build.block; diff --git a/core/src/mindustry/world/blocks/payloads/Payload.java b/core/src/mindustry/world/blocks/payloads/Payload.java index d12ce5a9c9..45fa7d80d1 100644 --- a/core/src/mindustry/world/blocks/payloads/Payload.java +++ b/core/src/mindustry/world/blocks/payloads/Payload.java @@ -41,6 +41,11 @@ public interface Payload extends Position{ /** update this payload inside a container unit or building. either can be null. */ default void update(@Nullable Unit unitHolder, @Nullable Building buildingHolder){} + /** @return if this payload died for whatever reason (e.g. reactor/combustion generator exploding itself) */ + default boolean isDead(){ + return false; + } + /** @return whether this payload was dumped. */ default boolean dump(){ return false; diff --git a/core/src/mindustry/world/blocks/payloads/PayloadBlock.java b/core/src/mindustry/world/blocks/payloads/PayloadBlock.java index 0597f5a8dc..8d37133de4 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadBlock.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadBlock.java @@ -168,6 +168,9 @@ public class PayloadBlock extends Block{ public void updateTile(){ if(payload != null){ payload.update(null, this); + if(payload.isDead()){ + payload = null; + } } } diff --git a/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java b/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java index bda42c2dd9..67a21c1efc 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java @@ -134,9 +134,14 @@ public class PayloadConveyor extends Block{ @Override public void updateTile(){ + if(item != null){ + item.update(null, this); + if(item.isDead()){ + item = null; + } + } if(enabled){ - if(item != null) item.update(null, this); lastInterp = curInterp; curInterp = fract(); //rollover skip diff --git a/core/src/mindustry/world/blocks/payloads/PayloadUnloader.java b/core/src/mindustry/world/blocks/payloads/PayloadUnloader.java index 205402fdd6..7db67d2b24 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadUnloader.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadUnloader.java @@ -51,6 +51,9 @@ public class PayloadUnloader extends PayloadLoader{ public void updateTile(){ if(payload != null){ payload.update(null, this); + if(payload.isDead()){ + payload = null; + } } lastOutputPower = 0f;