Clarify the meaning of the "NotReplicated" tag on the DevHub

image

The developer hub doesn’t seem to make the “NotReplicated” tag on the items as clear as it can possibly be, leaving developers confused if they tested to see if the property truly replicates or when they eventually come to a realisation of it


Some items / properties on the developer hub have the “NotReplicated” tag which you wouldn’t expect to have. The impression I had with this tag was that the property on the client and server will be different; if you update that item on the client, it will not be visible to the server, and thus, not visible to other clients. I recently did tests on the property, FloorMaterial of the Humanoid class and here’s what I did:

I had a setup where there are 9 parts with different materials on the client, but they have the same material on the server: Plastic. No part on the client has a Plastic material and each part is coloured differently and when the property changes on the client, it gets the FloorMaterial property on the server and the client, and then compares them

My results:

Here’s a place file if you want to test the replication of the property yourself:
FloorMaterial Replication Test.rbxl (19.9 KB)

As you can see, it always returns that there is an equality between the FloorMaterial of the humanoid on the client and that on the server in the output. This behaviour is the same in-game, as I have tested it. At first, I had thought that the tag should’ve been removed from the developer hub, but then I was told that the tags on the developer hub are generated from the internal API data dump and they can’t be wrong here, so it wouldn’t make sense to have it altered to have the tag removed. Looking at the latest API dump, the FloorMaterial property has the NotReplicated tag in the dump too. Thanks to @sircfenner and @Dekkonot for assisting me in coming to a realisation of this

Taking this into account, I request for a clarification of the “NotReplicated” tag on the developer hub, because the wording of it makes it seem that the properties that have this tag are going to be different on both on the client and server if changed on the client, but clearly some of the properties do this

2 Likes

Does it actually replicate FloorMaterial or does it just calculate it on both the client and server? In the latter case, NotReplicated is accurate. The value doesn’t travel over the network, just happens to be set on both independently.

The funny thing is a lot of properties are incorrectly labeled as “NotReplicated”. A good example of this would be Tool.GripPos. It can be modified client-side and replicate to the server.

Again, I don’t think it strictly “replicates”. Tool.GripPos is likely calculated from Tool.Grip upon indexing the property, so Tool.Grip is the one that replicates. The other Tool.*** properties just directly derive from that, so they don’t need to be replicated if Tool.Grip is set and replicated appropriately.

I think the labeling is technically correct, it’s just confusing because we as users (not engineers) don’t have as clear of a view of what properties derive from where and if they are calculated on the client / server / both. I do agree it’s confusing at a cursory glance.

2 Likes

I believe that it replicates – all I did to determine this was that I just get the values of the property on both the client and server and evaluate it on the client. I use a RemoteFunction to get the property on the server and send it back to the client. I have a place file with what I used in the original post of this topic

I went on play solo, switched to the server and checked what the FloorMaterial property is on there, and it was indeed what the player’s character was stepping on their client, which was Cobblestone, despite the material of the part the player’s character was standing on was Plastic on the server

Of course, when casting a ray downwards on both the client and the server, which I assume is what is used to determine the value of the FloorMaterial, the values were different and were anticipated

Green line: Ran on the Server (Material of the part on the server: Plastic)
Blue line: Ran on the Client (Material of the part on the client: Cobblestone)

1 Like

Yup, I can attest to the fact that the Humanoid.FloorMaterial property replicates. What I did to test this out was have a locally generated brick with the Material set as ForceField and checked it from the server. When I checked it from the server, it showed up as “ForceField” instead of Air/Plastic.

1 Like

So there’s a lot of different ways to replicate something in roblox. The main way is the automatic replication that happens when you set a property. This is the only thing NotReplicated refers to.

Some properties implement custom replication or just look like they’re replicated. GripPos just looks like it’s replicated because it’s derived from Grip, which is replicated. FloorMaterial follows a special replication rule that allows it to replicate up to the server as long as the client owns the humanoid.

So these things are correctly listed as NotReplicated. But the wiki is misleading when it fails to clarify the types of replication and the behavior of derived properties.

3 Likes