Patbox / TextPlaceholderAPI

Placeholder API for Fabric
GNU Lesser General Public License v3.0
39 stars 16 forks source link

Returning incorrect name with %player:displayname_visual% #24

Closed solonovamax closed 2 years ago

solonovamax commented 2 years ago

Currently, the placeholder api is returning the incorrect name with %player:displayname_visual%.

Example:

image

It should be displaying

*solo » [message here]

However, for some reason it is repeating the name twice (or more sometimes):

solo solosolo » [message here]

You can compound the effect when nesting %player:displayname_visual%.

Using the styled chat mod, if you set displayName to something that includes %player:displayname_visual%, then you may get an output similar to the following:

solosolo solosolosolosolo » [message here]

The mods

Here is a shortened version of my styled chat config to include all relevant info:

{
  "CONFIG_VERSION_DONT_TOUCH_THIS": 2,
  "_comment": "Before changing anything, see https://github.com/Patbox/StyledChat#configuration",
  "defaultStyle": {
    "displayName": "%luckperms:prefix_element highest% <click:suggest_command:'/msg %player:name_unformatted%'><hover:show_text:'%playerpronouns:pronouns%'>${default}</hover></click>",
    "chat": "<click:suggest_command:'/msg '><hover:show_text:'%playerpronouns:pronouns%'><gray>%player:displayname_visual%<reset> <dark_gray>»</dark_gray><reset> ${message}",
    "join": "<green>❯</green> <gray><lang:multiplayer.player.joined:'${player}<reset><gray>'>!</gray>",
    "joinRenamed": "<green>❯</green> <gray><lang:multiplayer.player.joined.renamed:'${player}<reset><gray>':'${old_name}<reset><gray>'>!</gray>",
    "joinFirstTime": "<green>❯</green> <dark_purple><lang:multiplayer.player.joined:'${player}'>!</dark_purple>",
    "left": "<red>❮</red> <gray><lang:multiplayer.player.left:'${player}'></gray>",
    "death": "<dark_red>${default_message}</dark_red>",
    "advancementTask": "<gray><lang:chat.type.advancement.task:'${player}<reset><gray>':'${advancement}'></gray>",
    "advancementChallenge": "<dark_purple><lang:chat.type.advancement.challenge:'${player}<reset><dark_purple>':'${advancement}'></dark_purple>",
    "advancementGoal": "<gold><lang:chat.type.advancement.goal:'${player}<reset><gold>':'${advancement}'></gold>",
    "teamChatSent": "<aqua><lang:'chat.type.team.sent':'<hover\\:\\'<lang\\:chat.type.team.hover>\\'><suggest_command\\:\\'/teammsg \\'>${team}':'${displayName}<reset><aqua>':'${message}'>",
    "teamChatReceived": "<aqua><lang:'chat.type.team.text':'<hover\\:\\'<lang\\:chat.type.team.hover>\\'><suggest_command\\:\\'/teammsg \\'>${team}':'${displayName}<reset><aqua>':'${message}'>",
    "privateMessageSent": "<gray>[<green>To</green> ${receiver}<reset><gray>]</gray> <dark_gray>»<reset> <gray>${message}</gray>",
    "privateMessageReceived": "<gray>[<red>From</red> ${sender}<reset><gray>]</gray> <dark_gray>»<reset> <gray>${message}</gray>",
    "sayCommand": "<click:suggest_command:'/msg %player:name_unformatted%'><hover:show_text:'%playerpronouns:pronouns%'><gray>%player:displayname_visual%<reset> <dark_gray>»</dark_gray><reset> ${message}",
    "meCommand": "<click:suggest_command:'/msg %player:name_unformatted%'><hover:show_text:'%playerpronouns:pronouns%'><gray>%player:displayname_visual%<reset> <green>»</green><reset><green> > ${message}"
  }
}
solonovamax commented 2 years ago

Possibly related, since they both appeared after updating to 1.19.2: #25

solonovamax commented 2 years ago

@Patbox I've identified the issue as being the lines

for (var sibling : input.getSiblings()) {
    baseText.append(cloneText(sibling));
}

in GeneralUtils.

There are two fixes for this:

  1. Remove the for loop entirely.
  2. Place baseText.getSiblings().clear(); in front of the for loop, to clear the siblings.

What's happening is that Text#copy already copies the siblings, according to Text.class:

default MutableText copy() {
    return new MutableText(this.getContent(), new ArrayList(this.getSiblings()), this.getStyle());
}

This causes them to be duplicated.

Would you like me to PR these changes?

Patbox commented 2 years ago

I have that fixed locally, just working on some other changes/improvements

solonovamax commented 2 years ago

Ah, alright sick.

solonovamax commented 2 years ago

Would you be able to publish a new release with these changes? Because, it's kinda annoying me on my server lol

no pressure though, I can always use my own build

solonovamax commented 2 years ago

oh yeah, changes aren't pushed so I probably shouldn't close lol

Patbox commented 2 years ago

Will keep open until released. Through yeah soon (just need to test more changes/features I made)