diff --git a/core/src/mindustry/ai/BlockIndexer.java b/core/src/mindustry/ai/BlockIndexer.java index 72bb503566..209d6865b6 100644 --- a/core/src/mindustry/ai/BlockIndexer.java +++ b/core/src/mindustry/ai/BlockIndexer.java @@ -66,6 +66,15 @@ public class BlockIndexer{ quadHeight = Mathf.ceil(world.height() / (float)quadrantSize); blocksPresent = new boolean[content.blocks().size]; + //so WorldLoadEvent gets called twice sometimes... ugh + for(Team team : Team.all){ + var data = state.teams.get(team); + if(data != null){ + if(data.buildings != null) data.buildings.clear(); + if(data.turrets != null) data.turrets.clear(); + } + } + for(Tile tile : world.tiles){ process(tile); diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java index 3eeff88e36..21fd44951c 100644 --- a/core/src/mindustry/core/World.java +++ b/core/src/mindustry/core/World.java @@ -603,6 +603,12 @@ public class World{ @Override public void end(){ + applyFilters(); + + super.end(); + } + + public void applyFilters(){ Seq filters = map.filters(); if(!filters.isEmpty()){ @@ -615,8 +621,6 @@ public class World{ filter.apply(tiles, input); } } - - super.end(); } } } diff --git a/core/src/mindustry/entities/units/AIController.java b/core/src/mindustry/entities/units/AIController.java index f4f3d99c8e..cd79041957 100644 --- a/core/src/mindustry/entities/units/AIController.java +++ b/core/src/mindustry/entities/units/AIController.java @@ -2,13 +2,11 @@ package mindustry.entities.units; import arc.math.*; import arc.math.geom.*; -import arc.struct.*; import arc.util.*; import mindustry.*; import mindustry.ai.*; import mindustry.entities.*; import mindustry.game.*; -import mindustry.game.Teams.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index 8e48786da5..153fd640f5 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -74,6 +74,10 @@ public class Teams{ return map[team.id] == null ? (map[team.id] = new TeamData(team)) : map[team.id]; } + public @Nullable TeamData getOrNull(Team team){ + return map[team.id]; + } + public Seq playerCores(){ return get(state.rules.defaultTeam).cores; } diff --git a/core/src/mindustry/io/SaveVersion.java b/core/src/mindustry/io/SaveVersion.java index 72938000b9..0e7a7bf0ec 100644 --- a/core/src/mindustry/io/SaveVersion.java +++ b/core/src/mindustry/io/SaveVersion.java @@ -154,9 +154,11 @@ public abstract class SaveVersion extends SaveFileReader{ if(state.rules.spawns.isEmpty()) state.rules.spawns = waves.get(); lastReadBuild = map.getInt("build", -1); - state.rules.sector = context.getSector(); - if(state.rules.sector != null){ - state.rules.sector.planet.ruleSetter.get(state.rules); + if(context.getSector() != null){ + state.rules.sector = context.getSector(); + if(state.rules.sector != null){ + state.rules.sector.planet.ruleSetter.get(state.rules); + } } if(!headless){ diff --git a/core/src/mindustry/maps/generators/FileMapGenerator.java b/core/src/mindustry/maps/generators/FileMapGenerator.java index 039e87553b..a310a22495 100644 --- a/core/src/mindustry/maps/generators/FileMapGenerator.java +++ b/core/src/mindustry/maps/generators/FileMapGenerator.java @@ -42,6 +42,12 @@ public class FileMapGenerator implements WorldGenerator{ public Sector getSector(){ return sector; } + + @Override + public void end(){ + applyFilters(); + //no super.end(), don't call world load event twice + } }); world.setGenerating(true); diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index e28a2ad931..5a7ef40436 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -196,7 +196,7 @@ public class Tile implements Position, QuadTreeObject, Displayable{ } public boolean isCenter(){ - return build == null || build.tile() == this; + return build == null || build.tile == this; } public int centerX(){