Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

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?

  • Author

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.

  • Author

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)

  • Author

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.

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

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.