As a Roblox developer, it is currently too hard to manage networking on physical game objects. We can only interface with network ownership via the limited API methods:
CanSetNetworkOwnership
GetNetworkOwner
GetNetworkOwnershipAuto
SetNetworkOwner
SetNetworkOwnershipAuto
Pain points
Current API has inconsistent/ambiguous naming (Owner vs Ownership)
There is currently no signal to detect when the network owner or the auto behavior is changed. The only option is polling
It’s troublesome to have to call CanSetNetworkOwnership() until it returns true to set the network owner
Proposed Changes
New BasePart readonly property: AssemblyNetworkOwner - Player instance that updates whenever ownership changes
New BasePart readonly property: AssemblyNetworkBehavior - Enum that can switch between Automatic and Manual
New BasePart readonly property: Dynamic - Bool that is true while the part is a component of an unanchored assembly which is actively being simulated. This could fill use cases of both CanSetNetworkOwnership and IsGrounded
Deprecate CanSetNetworkOwnership, GetNetworkOwner, and GetNetworkOwnerShipAuto.
It would also be preferable to have a property interface for the Set methods as well, but I’m not sure how practical that would be as a BasePart property.
But it’s like that for all other Instance-value properties (ex: Player.Character is nil if it doesn’t exist, who would’ve guessed), plus it’s sort of like that right now, where you do Object:SetNetworkOwner(nil) to set the network owner to the server.