After several days, and attempts to solve the visual bug, I was able to achieve it. I share the part of the code that I modified, I don't know if it's right or wrong, but at least it works.
/**
* adds new member to party
* @param player
*/
public synchronized void addPartyMember(Player player)
{
if (_members.contains(player))
{
return;
}
// add player to party
_members.add(player);
// sends new member party window for all members
// we do all actions before adding member to a list, this speeds things up a little
player.sendPacket(new PartySmallWindowAll(player, this));
SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_JOINED_S1_S_PARTY);
msg.addString(getLeader().getName());
player.sendPacket(msg);
msg = new SystemMessage(SystemMessageId.YOU_HAVE_JOINED_S1_S_PARTY);
msg.addString(player.getName());
broadcastToPartyMembers(msg);
for (Player member : _members)
{
if (member != player)
{
member.updateEffectIcons(true); // update party icons only
member.broadcastUserInfo();
member.sendPacket(new PartySmallWindowAdd(player, this));
}
}