Skip to content

Bug: FancyNPCs using legacy colors for team names causing warnings in other plugins #290

Description

@VRXDev2

In which plugin has the error occurred?

FancyNpcs

What happened?

When creating an NPC via the plugin API, Nexo (and likely other plugins that intercept scoreboard packets), Adventure API throws an exception caused by legacy colors.
My suggested fix is to simply migrate to modern formatting, because there is practically no reason to still use legacy.

*Nexo's developer refused to make modifications to their code.

Snippet of the API usage:

@Override
    public String preview(Player player) {
        Location loc = player.getEyeLocation();
        Vector direction = loc.getDirection().normalize().multiply(2.5);

        Location locationAhead = loc.add(direction);
        locationAhead.setY(player.getY());
        locationAhead.setPitch(0);
        locationAhead.setYaw(player.getYaw() + 180);
        NpcData data = new NpcData(player.getName() + "_preview", player.getUniqueId(), locationAhead);
        data.setMirrorSkin(true);
        data.setDisplayName("<empty>");
        data.setVisibility(NpcVisibility.MANUAL);
        data.setVisibilityDistance(6);

        Npc npc = FancyNpcsPlugin.get().getNpcAdapter().apply(data);
        npc.setSaveToFile(false);
        FancyNpcsPlugin.get().getNpcManager().registerNpc(npc);

        npc.create();
        Bukkit.getScheduler().runTaskAsynchronously(Cosmetics.get(), () -> npc.spawn(player));

        player.playSound(player, Sound.ENTITY_PUFFER_FISH_BLOW_UP, 0.7f, 1f);
        player.closeInventory();

        Bukkit.getScheduler().runTaskLater(Cosmetics.get(), () -> {
            FancyNpcsPlugin.get().getNpcManager().removeNpc(npc);
            npc.removeForAll();

            if (player.isOnline()) {
                player.playSound(player, Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1.1f);

                Location particleLoc = locationAhead.clone().add(0, 1, 0);
                player.spawnParticle(Particle.POOF, particleLoc, 10, 0.35, 0.8, 0.35, 0.1);
            }
            Bukkit.getScheduler().runTaskLater(Cosmetics.get(), () -> {
                if (player.isOnline()) Cosmetics.get().cosmeticMenus.get(CosmeticType.HAT).open(player);
            }, 20);
        }, 100);
        return "";
    }
}

In which software has the error occurred?

Paper

Plugin version

2.11.0

Server version

1.21.11 PaperMC

Relevant log output

[14:52:33 WARN]: net.kyori.adventure.text.LegacyFormattingDetected: Legacy formatting codes have been detected in a component - this is unsupported behaviour. Please refer to the Adventure documentation (https://docs.papermc.io/adventure/) for more information. Component: TextComponentImpl{content="npc-�f�3�4�f�4�8�n�6", style=StyleImpl{obfuscated=not_set, bold=not_set, strikethrough=not_set, underlined=not_set, italic=not_set, color=null, shadowColor=null, clickEvent=null, hoverEvent=null, insertion=null, font=null}, children=[]}
[14:52:33 WARN]: 	at net.kyori.adventure.text.TextComponentImpl.warnWhenLegacyFormattingDetected(TextComponentImpl.java:84)
[14:52:33 WARN]: 	at net.kyori.adventure.text.TextComponentImpl.<init>(TextComponentImpl.java:74)
[14:52:33 WARN]: 	at net.kyori.adventure.text.TextComponentImpl.create(TextComponentImpl.java:55)
[14:52:33 WARN]: 	at net.kyori.adventure.text.TextComponentImpl.create0(TextComponentImpl.java:60)
[14:52:33 WARN]: 	at net.kyori.adventure.text.TextComponentImpl.style(TextComponentImpl.java:107)
[14:52:33 WARN]: 	at net.kyori.adventure.text.TextComponentImpl.style(TextComponentImpl.java:39)
[14:52:33 WARN]: 	at net.kyori.adventure.text.Component.hoverEvent(Component.java:2567)
[14:52:33 WARN]: 	at net.kyori.adventure.text.ScopedComponent.hoverEvent(ScopedComponent.java:213)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.v1_21_R10.packets.transformers.ComponentTransformer.transformKyori(ComponentTransformer.kt:73)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.v1_21_R10.packets.transformers.ComponentTransformer.transform(ComponentTransformer.kt:37)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.v1_21_R10.packets.transformers.ComponentTransformer.transform(ComponentTransformer.kt:33)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.v1_21_R10.packets.transformers.ComponentTransformer.transform(ComponentTransformer.kt:30)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.commons.packets.NexoCommonsHandler.transform(NexoCommonsHandler.kt:355)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.v1_21_R10.packets.NexoChannelHandler._init_$lambda$1(NexoChannelHandler.kt:97)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.v1_21_R10.packets.NexoChannelHandler$special$$inlined$registerTransformer$1.invoke(NexoCommonsHandler.kt:119)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.v1_21_R10.packets.NexoChannelHandler$special$$inlined$registerTransformer$1.invoke(NexoCommonsHandler.kt:118)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.commons.packets.NexoCommonsHandler.transformPacket(NexoCommonsHandler.kt:138)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.commons.packets.NexoCommonsHandler._init_$lambda$0(NexoCommonsHandler.kt:161)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.commons.packets.NexoCommonsHandler$special$$inlined$registerTransformer$default$1.invoke(NexoCommonsHandler.kt:119)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.commons.packets.NexoCommonsHandler$special$$inlined$registerTransformer$default$1.invoke(NexoCommonsHandler.kt:118)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.commons.packets.NexoCommonsHandler.transformPacket(NexoCommonsHandler.kt:138)
[14:52:33 WARN]: 	at nexo-1.25.1.jar//com.nexomc.nexo.nms.commons.packets.NexoCommonsHandler.write(NexoCommonsHandler.kt:96)
[14:52:33 WARN]: 	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:825)
[14:52:33 WARN]: 	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:804)
[14:52:33 WARN]: 	at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1041)
[14:52:33 WARN]: 	at io.netty.channel.Channel.writeAndFlush(Channel.java:262)
[14:52:33 WARN]: 	at net.minecraft.network.Connection.doSendPacket(Connection.java:469)
[14:52:33 WARN]: 	at net.minecraft.network.Connection.lambda$sendPacket$10(Connection.java:451)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Priority: MediumShould be done for the next regular versionStatus: PendingWaiting for someone to work onType: BugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions