diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index 1942e51166..ebd5136139 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -23,6 +23,7 @@ import mindustry.net.*; import mindustry.net.Administration.*; import mindustry.net.Packets.*; import mindustry.world.*; +import mindustry.world.meta.*; import java.io.*; import java.net.*; @@ -931,19 +932,20 @@ public class NetServer implements ApplicationListener{ syncStream.reset(); short sent = 0; - for(Building entity : Groups.build){ - if(!entity.block.sync) continue; - sent++; + for(var team : state.teams.present){ + for(var build : indexer.getFlagged(team.team, BlockFlag.synced)){ + sent++; - dataStream.writeInt(entity.pos()); - dataStream.writeShort(entity.block.id); - entity.writeSync(Writes.get(dataStream)); + dataStream.writeInt(build.pos()); + dataStream.writeShort(build.block.id); + build.writeSync(Writes.get(dataStream)); - if(syncStream.size() > maxSnapshotSize){ - dataStream.close(); - Call.blockSnapshot(sent, syncStream.toByteArray()); - sent = 0; - syncStream.reset(); + if(syncStream.size() > maxSnapshotSize){ + dataStream.close(); + Call.blockSnapshot(sent, syncStream.toByteArray()); + sent = 0; + syncStream.reset(); + } } } diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 579f824646..7841f9fbbc 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -1240,6 +1240,10 @@ public class Block extends UnlockableContent implements Senseable{ flags = flags.with(BlockFlag.hasFogRadius); } + if(sync){ + flags = flags.with(BlockFlag.synced); + } + //initialize default health based on size if(health == -1){ boolean round = false; diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index 0583fe6b52..65d723da57 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -71,6 +71,7 @@ public class CoreBlock extends StorageBlock{ priority = TargetPriority.core; flags = EnumSet.of(BlockFlag.core); unitCapModifier = 10; + sync = false; //core items are synced elsewhere drawDisabled = false; canOverdrive = false; commandable = true; diff --git a/core/src/mindustry/world/blocks/storage/StorageBlock.java b/core/src/mindustry/world/blocks/storage/StorageBlock.java index cb0fc541f1..31dd510f89 100644 --- a/core/src/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/mindustry/world/blocks/storage/StorageBlock.java @@ -21,6 +21,7 @@ public class StorageBlock extends Block{ hasItems = true; solid = true; update = false; + sync = true; destructible = true; separateItemCapacity = true; group = BlockGroup.transportation; diff --git a/core/src/mindustry/world/meta/BlockFlag.java b/core/src/mindustry/world/meta/BlockFlag.java index 9f6cd57a33..0e36efd5e7 100644 --- a/core/src/mindustry/world/meta/BlockFlag.java +++ b/core/src/mindustry/world/meta/BlockFlag.java @@ -31,7 +31,8 @@ public enum BlockFlag{ unitAssembler, hasFogRadius, steamVent, - blockRepair; + blockRepair, + synced; public final static BlockFlag[] all = values();