Simplify network ownership API

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

  1. Current API has inconsistent/ambiguous naming (Owner vs Ownership)
  2. There is currently no signal to detect when the network owner or the auto behavior is changed. The only option is polling
  3. It’s troublesome to have to call CanSetNetworkOwnership() until it returns true to set the network owner

Proposed Changes

  1. New BasePart readonly property: AssemblyNetworkOwner - Player instance that updates whenever ownership changes

  2. New BasePart readonly property: AssemblyNetworkBehavior - Enum that can switch between Automatic and Manual

  3. 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

  4. 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.



I agree with this.

This will be confusing if the network owner is nil.

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.

There is a list of numerous other issues with the network ownership system in this thread.

Related threads

Very old one with many replies:

Even older:

Mine, not many replies but a detailed proposal: