Initial network entity sync fixes

This commit is contained in:
Anuken
2026-09-04 11:28:17 -04:00
parent ca6b369b85
commit f2e1e2ad4f
3 changed files with 16 additions and 5 deletions
+8 -2
View File
@@ -416,8 +416,12 @@ public abstract class SaveVersion extends SaveFileReader{
}
public void writeWorldEntities(DataOutput stream) throws IOException{
writeWorldEntities(stream, null);
}
public void writeWorldEntities(DataOutput stream, @Nullable Boolf<Unit> unitFilter) throws IOException{
//units are not included in Groups.all
stream.writeInt(Groups.all.count(Entityc::serialize) + Groups.unit.size());
stream.writeInt(Groups.all.count(Entityc::serialize) + (unitFilter == null ? Groups.unit.size() : Groups.unit.count(unitFilter)));
for(Entityc entity : Groups.all){
if(!entity.serialize()) continue;
@@ -425,7 +429,9 @@ public abstract class SaveVersion extends SaveFileReader{
writeEntity(entity, stream);
}
for(Entityc entity : Groups.unit){
for(Unit entity : Groups.unit){
if(unitFilter != null && !unitFilter.get(entity)) continue;
writeEntity(entity, stream);
}
}
+1 -1
View File
@@ -475,7 +475,7 @@ public class TypeIO{
entity = (Unit)EntityMapping.map(typeID & 0xFF).get();
entity.id(id);
if(!netClient.isEntityUsed(entity.id())){
if(!netClient.isEntityUsed(id)){
add = true;
}
created = true;
+7 -2
View File
@@ -62,8 +62,11 @@ public class NetworkIO{
writer.writeContentHeader(stream);
writer.writeMap(stream);
writer.writeEntities(stream);
//these three calls mimic what writeEntities has, except with a custom filter, which is a bit fragile
writer.writeEntityMapping(stream);
writer.writeTeamBlocks(stream);
writer.writeWorldEntities(stream, state.rules.fog ? u -> !u.inFogTo(player.team()) : null);
writer.writeMarkers(stream);
writer.writeCustomChunks(stream, true);
}catch(IOException e){
@@ -102,9 +105,11 @@ public class NetworkIO{
writer.readContentHeader(stream);
writer.readMap(stream, state);
writer.readEntities(stream, state);
writer.readTeamBlocks(stream);
writer.readMarkers(stream);
writer.readCustomChunks(stream);
Groups.all.each(e -> netClient.addRemovedEntity(e.id()));
Groups.unit.each(e -> netClient.addRemovedEntity(e.id()));
}catch(IOException e){
throw new RuntimeException(e);
}finally{