From b48f35091494020421d1fb955ded65d44e4e18d2 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Mar 2022 14:46:14 -0500 Subject: [PATCH] Fixed block team change not processing correctly --- core/src/mindustry/core/Logic.java | 8 ++++---- core/src/mindustry/entities/comp/BuildingComp.java | 12 +++++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index e4dfc4b997..25c5ed2137 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -156,7 +156,9 @@ public class Logic implements ApplicationListener{ //TODO maybe make it a separate rule? //makes cores go derelict in RTS mode, helps clean things up if(e.tile.build instanceof CoreBuild core && core.team.isAI() && core.team.rules().rtsAi){ - core.team.data().makeDerelict(core.x, core.y, state.rules.enemyCoreBuildRadius); + Core.app.post(() -> { + core.team.data().makeDerelict(core.x, core.y, state.rules.enemyCoreBuildRadius); + }); } }); @@ -175,9 +177,7 @@ public class Logic implements ApplicationListener{ //listen to core changes; if all cores have been destroyed, set to derelict. Events.on(CoreChangeEvent.class, e -> Core.app.post(() -> { if(state.rules.cleanupDeadTeams && state.rules.pvp && !e.core.isAdded() && e.core.team != Team.derelict && e.core.team.cores().isEmpty()){ - Core.app.post(() -> { - e.core.team.data().destroyToDerelict(); - }); + e.core.team.data().destroyToDerelict(); } })); } diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index ae6b1e2fef..fb13823e30 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1527,10 +1527,16 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, /** Changes this building's team in a safe manner. */ public void changeTeam(Team next){ Team last = this.team; - indexer.removeIndex(tile); + boolean was = isValid(); + + if(was) indexer.removeIndex(tile); + this.team = next; - indexer.addIndex(tile); - Events.fire(teamChangeEvent.set(last, self())); + + if(was){ + indexer.addIndex(tile); + Events.fire(teamChangeEvent.set(last, self())); + } } public boolean canPickup(){