Jump to content

(SOLVED) Rendering with IExtendedProperties for all applicable players.


Darkona

Recommended Posts

Hello mates.

 

I'm using IExtendedProperties to save information about a player.

I use a custom player renderer to render a model on the player depending on the custom property.

Synchronization between the server and the player works correctly, but the problem arises whn I want to render other players: they can't see the model.

 

I realize that each client knows about its personal IExtendedProperties, but do not know about other client's.

 

Any recommendation on an approach that would make all clients in rendering distance know that certain players have the property set?

 

My current approach is sending packets to all players nearby each other every second or so, saving the data in a HashMap<UUID,NBTTagCompound> in the client proxy if the player != Minecraft...thePlayer, and when rendering doing a lookup  in said HasMap based on the player's UUID.

 

Is there something I'm missing that could make this easier?

Link to comment
Share on other sites

I get it, thanks diesieben.

My only doubt is if the EntityID is the same for the server world and the client world. My guess is yes but I remember seeing somewhere else that there's a persistent ID, and then there's IDs.

I'm coding your proposal at the moment to see how it goes anyway.

Link to comment
Share on other sites

public void func_151248_b(Entity p_151248_1_, Packet p_151248_2_)

 

this expects a packet, and I assume I could use the old packet250custompayload for this.

 

but a little down below there's this:

public Set<net.minecraft.entity.player.EntityPlayer> getTrackingPlayers(Entity entity)

 

which appears to return a set of the players tracking an entity. This looks like a better approach, considering I'm using the new networking wrapper thing. I'll test this out and if it doesn't work, packet250 it is (which I don't want to use since I'm sending an NBT and that would be a lot of refactoring)

Link to comment
Share on other sites

This is in the property class

 

  public static void syncToNear(EntityPlayer player)
    {
        if(player.worldObj instanceof WorldServer)
        {
            WorldServer world = (WorldServer)player.worldObj;
            SyncPropertiesPacket.Message msg = new SyncPropertiesPacket.Message(player.getEntityId(), get(player).getData());
            world.getEntityTracker().func_151248_b(player, ModNetwork.net.getPacketFrom(msg));
        }
    }

 

And this is in the client side:

 

public void synchronizePlayer(int id, NBTTagCompound properties)
    {
            Entity entity = Minecraft.getMinecraft().theWorld.getEntityByID(id);
            if(entity != null && entity instanceof EntityPlayer)
            {

                EntityPlayer player = (EntityPlayer)entity;
                if(BackpackProperty.get(player) == null) BackpackProperty.register(player);
                BackpackProperty.get(player).loadNBTData(properties);
                if(player == Minecraft.getMinecraft().thePlayer)
                {
                    if (player.openContainer != null && player.openContainer instanceof IWearableContainer)
                    {
                        player.openContainer.detectAndSendChanges();
                    }
                }
            }
    }

 

Works perfectly. Thanks so much, diesieben, you just saved me like 5 solid hours or more of messing around.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.