Skip to content

Conversation

@Peashooter101
Copy link
Member

Resolves #3.

@Peashooter101 Peashooter101 self-assigned this Dec 31, 2025
@Peashooter101 Peashooter101 added the enhancement New feature or request label Dec 31, 2025
Copy link
Member

@RhythmicSys RhythmicSys left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, one main change requested

Component playerName = player == null ? Component.empty() : player.displayName();
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
message = PlaceholderAPI.setPlaceholders(player, message);
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs to be adjusted because colored placeholders from placeholder API use section signs, and minimessage cannot use both the tag system and section signs.

One way this can be done is like this usage example:

public static @NotNull TagResolver papiTag(final @NotNull Player player) {
        return TagResolver.resolver("papi", (argumentQueue, context) -> {
            final String papiPlaceholder = argumentQueue.popOr(Message.ERROR_PAPI_NEEDS_ARGUMENT.getMessage()).value();
            final String parsedPlaceholder = PlaceholderAPI.setPlaceholders(player, '%' + papiPlaceholder + '%');
            Component componentPlaceholder;
            if (parsedPlaceholder.contains("§")) {
                componentPlaceholder = LegacyComponentSerializer.legacySection().deserialize(parsedPlaceholder);
            } else {
                componentPlaceholder = miniMessage.deserialize(parsedPlaceholder);
            }
            return Tag.selfClosingInserting(componentPlaceholder);
        });
    }

but that requires that the user uses <papi:placeholder>

Stacktrace that is generated when attempting to use a colored placeholder from placeholder API in the message:

[19:04:42 ERROR]: Could not pass event PlayerDeepSleepEvent to SleepMessages v1.1.0
net.kyori.adventure.text.minimessage.internal.parser.ParsingExceptionImpl: Legacy formatting codes have been detected in a MiniMessage string - this is unsupported behaviour. Please refer to the Adventure documentation (https://docs.advntr.dev) for more information.
        <grey>§a20.0 has fallen asleep. <sleeping> out of <needed> required players in <worldname> are sleeping.
              ^^
        at net.kyori.adventure.text.minimessage.internal.parser.TokenParser.parseString(TokenParser.java:170) ~[adventure-text-minimessage-4.25.0.jar:?]
        at net.kyori.adventure.text.minimessage.internal.parser.TokenParser.resolvePreProcessTags(TokenParser.java:112) ~[adventure-text-minimessage-4.25.0.jar:?]
        at net.kyori.adventure.text.minimessage.MiniMessageParser.parseToTree(MiniMessageParser.java:195) ~[adventure-text-minimessage-4.25.0.jar:?]
        at net.kyori.adventure.text.minimessage.MiniMessageParser.parseFormat(MiniMessageParser.java:209) ~[adventure-text-minimessage-4.25.0.jar:?]
        at net.kyori.adventure.text.minimessage.MiniMessageImpl.deserialize(MiniMessageImpl.java:92) ~[adventure-text-minimessage-4.25.0.jar:?]
        at net.kyori.adventure.text.minimessage.MiniMessage.deserialize(MiniMessage.java:182) ~[adventure-text-minimessage-4.25.0.jar:?]
        at SleepMessages-1.1.0.jar//adhdmc.sleepmessages.SleepListener.sendWorldMessage(SleepListener.java:82) ~[?:?]
        at SleepMessages-1.1.0.jar//adhdmc.sleepmessages.SleepListener.onPlayerSleep(SleepListener.java:55) ~[?:?]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[purpur-api-1.21.11-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:71) ~[purpur-api-1.21.11-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:131) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:628) ~[purpur-api-1.21.11-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.event.Event.callEvent(Event.java:46) ~[purpur-api-1.21.11-R0.1-SNAPSHOT.jar:?]
        at net.minecraft.world.entity.player.Player.tick(Player.java:290) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.level.ServerPlayer.doTick(ServerPlayer.java:818) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.tickPlayer(ServerGamePacketListenerImpl.java:396) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.tick(ServerGamePacketListenerImpl.java:370) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.network.Connection.tick(Connection.java:582) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.network.ServerConnectionListener.tick(ServerConnectionListener.java:230) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.MinecraftServer.tickConnection(MinecraftServer.java:1909) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.dedicated.DedicatedServer.tickConnection(DedicatedServer.java:595) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1872) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1649) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.dedicated.DedicatedServer.tickServer(DedicatedServer.java:473) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.MinecraftServer.processPacketsAndTick(MinecraftServer.java:1705) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1373) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:392) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
[19:04:52 ERROR]: Could not pass event PlayerDeepSleepEvent to SleepMessages v1.1.0
net.kyori.adventure.text.minimessage.internal.parser.ParsingExceptionImpl: Legacy formatting codes have been detected in a MiniMessage string - this is unsupported behaviour. Please refer to the Adventure documentation (https://docs.advntr.dev) for more information.
        <grey>§a20.0 has fallen asleep. <sleeping> out of <needed> required players in <worldname> are sleeping.
              ^^
        at net.kyori.adventure.text.minimessage.internal.parser.TokenParser.parseString(TokenParser.java:170) ~[adventure-text-minimessage-4.25.0.jar:?]
        at net.kyori.adventure.text.minimessage.internal.parser.TokenParser.resolvePreProcessTags(TokenParser.java:112) ~[adventure-text-minimessage-4.25.0.jar:?]
        at net.kyori.adventure.text.minimessage.MiniMessageParser.parseToTree(MiniMessageParser.java:195) ~[adventure-text-minimessage-4.25.0.jar:?]
        at net.kyori.adventure.text.minimessage.MiniMessageParser.parseFormat(MiniMessageParser.java:209) ~[adventure-text-minimessage-4.25.0.jar:?]
        at net.kyori.adventure.text.minimessage.MiniMessageImpl.deserialize(MiniMessageImpl.java:92) ~[adventure-text-minimessage-4.25.0.jar:?]
        at net.kyori.adventure.text.minimessage.MiniMessage.deserialize(MiniMessage.java:182) ~[adventure-text-minimessage-4.25.0.jar:?]
        at SleepMessages-1.1.0.jar//adhdmc.sleepmessages.SleepListener.sendWorldMessage(SleepListener.java:82) ~[?:?]
        at SleepMessages-1.1.0.jar//adhdmc.sleepmessages.SleepListener.onPlayerSleep(SleepListener.java:55) ~[?:?]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[purpur-api-1.21.11-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:71) ~[purpur-api-1.21.11-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:131) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:628) ~[purpur-api-1.21.11-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.event.Event.callEvent(Event.java:46) ~[purpur-api-1.21.11-R0.1-SNAPSHOT.jar:?]
        at net.minecraft.world.entity.player.Player.tick(Player.java:290) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.level.ServerPlayer.doTick(ServerPlayer.java:818) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.tickPlayer(ServerGamePacketListenerImpl.java:396) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.tick(ServerGamePacketListenerImpl.java:370) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.network.Connection.tick(Connection.java:582) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.network.ServerConnectionListener.tick(ServerConnectionListener.java:230) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.MinecraftServer.tickConnection(MinecraftServer.java:1909) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.dedicated.DedicatedServer.tickConnection(DedicatedServer.java:595) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1872) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1649) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.dedicated.DedicatedServer.tickServer(DedicatedServer.java:473) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.MinecraftServer.processPacketsAndTick(MinecraftServer.java:1705) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1373) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:392) ~[purpur-1.21.11.jar:1.21.11-2545-9f8e602]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PAPI Placeholder Support

3 participants