From 576398e77dbe4921f4509704dc4532f31af3ce96 Mon Sep 17 00:00:00 2001 From: Tristan Calay Date: Fri, 12 Jun 2026 22:10:17 -0400 Subject: [PATCH 1/2] Injection of CN_RemoteEntity --- addons/gecs/network/spawn_manager.gd | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/gecs/network/spawn_manager.gd b/addons/gecs/network/spawn_manager.gd index f197a95e..5b3a14e3 100644 --- a/addons/gecs/network/spawn_manager.gd +++ b/addons/gecs/network/spawn_manager.gd @@ -253,6 +253,10 @@ func _inject_authority_markers(entity: Entity, net_id: CN_NetworkIdentity) -> vo or (_ns.net_adapter.is_server() and net_id.is_server_owned()) ): entity.add_component(CN_LocalAuthority.new()) + + # CN_RemoteEntity: an entity owned by a remote peer (peer_id != multiplayer unique ID) + if net_id.peer_id != _ns.net_adapter.get_multiplayer().get_unique_id(): + entity.add_component(CN_RemoteEntity.new()) ## Find a component on an entity by its type name string. From f8e6414944dbed1e68494d662e358892d00d8866 Mon Sep 17 00:00:00 2001 From: Tristan Calay Date: Fri, 12 Jun 2026 22:19:37 -0400 Subject: [PATCH 2/2] Remove stale marker, only add if not server owned --- addons/gecs/network/spawn_manager.gd | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/addons/gecs/network/spawn_manager.gd b/addons/gecs/network/spawn_manager.gd index 5b3a14e3..4bc8732f 100644 --- a/addons/gecs/network/spawn_manager.gd +++ b/addons/gecs/network/spawn_manager.gd @@ -241,11 +241,16 @@ func _inject_authority_markers(entity: Entity, net_id: CN_NetworkIdentity) -> vo # Remove stale markers first -- idempotent re-spawn safety entity.remove_component(CN_LocalAuthority) entity.remove_component(CN_ServerAuthority) + entity.remove_component(CN_RemoteEntity) # CN_ServerAuthority: server-owned entities (peer_id == 0) on ALL peers if net_id.is_server_owned(): entity.add_component(CN_ServerAuthority.new()) - + + # CN_RemoteEntity: an entity owned by a remote peer (peer_id != multiplayer unique ID) + elif net_id.peer_id != _ns.net_adapter.get_multiplayer().get_unique_id(): + entity.add_component(CN_RemoteEntity.new()) + # CN_LocalAuthority: local peer's own entity # Also: server gets CN_LocalAuthority on server-owned entities (server "is local" for them) if ( @@ -253,10 +258,6 @@ func _inject_authority_markers(entity: Entity, net_id: CN_NetworkIdentity) -> vo or (_ns.net_adapter.is_server() and net_id.is_server_owned()) ): entity.add_component(CN_LocalAuthority.new()) - - # CN_RemoteEntity: an entity owned by a remote peer (peer_id != multiplayer unique ID) - if net_id.peer_id != _ns.net_adapter.get_multiplayer().get_unique_id(): - entity.add_component(CN_RemoteEntity.new()) ## Find a component on an entity by its type name string.