Giter VIP home page Giter VIP logo

minedown's Introduction

MineDown-adventure

A library that adds the ability to use a MarkDown inspired markup to write Minecraft chat components!

It provides a custom mark up syntax which is loosely based on MarkDown that adds the ability to use the full power of component messages with the same simplicity as legacy formatting codes. (Which it can still support!) It also includes a way to directly replace placeholders in the messages, both string based and component based ones!

This requires the kyori-adventure chat API so you need to provide one of the platform libraries in your project in order to use these messages! See this plugin for a simple implementation.

Syntax

Inline Formatting

Description Syntax More Info Preview
Color legacy &6Text Formatting codes
Color &gold&Text Color names
RGB Hex Color &#ff00ff&Text Full hexadecimal format
RGB Hex Color &#f0f&Text Short format (equivalent to long one)
Gradient &#f0f-#fff&Text Inline gradients
Rainbow &rainbow&Text Inline Rainbow
Rainbow Phase &rainbow:20&Text Inline Rainbow with a phase
Bold **Text**
Italic ##Text##
Underlined __Text__
Strikethrough ~~Text~~
Obfuscated ??Text??

Events

You can define click and hover events with the commonly used MarkDown link syntax as well as specify formatting, font and colors that way.

Simple Syntax

Description Syntax
General syntax [Text](text-color text-formatting... link hover text)
Simple Link [Text](https://example.com)
Simple Command [Text](/command to run)
Link + Hover [Text](https://example.com Hover Text)
Text formatting [Text](blue underline !bold)
Gradient [Text](#fff-#000)
Rainbow [Text](rainbow)
Phased Rainbow [Text](rainbow:20)
Text formatting + Link + Hover [Text](#0000ff underline https://example.com Hover Text)

Advanced Syntax

Description Syntax More Info
General syntax [Text](action=value) ClickEvent.Action, HoverEvent.Action
Link [Text](open_url=https://example.com)
Color [Text](color=red) Color names
RGB Hex Color [Text](color=#ff00ff) Full hexadecimal format
RGB Hex Color [Text](color=#f0f) Short format (equivalent to long one)
RGB Color Gradient [Text](color=#fff-#000) Gradient of two colors. (Supports all color forms)
RGB Color Gradient [Text](color=#fff-#333-#222) Gradient of three colors.
RGB Rainbow [Text](color=rainbow) An RGB rainbow.
Phased RGB Rainbow [Text](color=rainbow:50) An RGB rainbow with a specific phase.
Formatting [Text](format=underline,bold) Specify formatting
Disable Formatting [Text](format=!underline) Disable the specific formatting with a ! prefix
Font [Text](font=custom_font) Set a custom font from a resource pack
Run Command [Text](run_command=/command string) Run command on click
Suggest Command [Text](suggest_command=/command) Suggest a command on click
Simple Hover [Text](hover=Hover Text) Show hover text
Hover Text [Text](show_text=Hover Text) Show hover text
Hover Entity Info [Text](show_entity=uuid:pig Name) Show entity information.
Hover Item Info [Text](show_item=stone*2 nbt...) Show item information, additional information needs to be provided as a string of the nbt in json
Insertion [Text](insert=insert into input) Insert into input on shift click, can be combined with other events

All advanced settings can be chained/included in a event definition. You can't however add multiple different colors or click and hover actions!

How to use it

The library's main API access is through the MineDown.class and its parse methods.

E.g. you can use it like this in your Bukkit plugin:

BukkitAudiences.create(plugin).player(player).sendMessage(new MineDown(rawMessage).replace(replacements).toComponent());

or with a static approach:

BukkitAudiences.create(plugin).player(player).sendMessage(MineDown.parse(rawMessage, replacements));

Take a look at the MineDown JavaDocs for more detailed info on the library and the included classes.

Include it into your plugin

You can easily include this library into your plugin by using maven. Make sure to relocate it into your plugin's package!

Repository

<repositories>
    <repository>
        <id>minebench-repo</id>
        <url>https://repo.minebench.de/</url>
    </repository>
</repositories>

Artifact

<dependencies>
    <dependency>
        <groupId>de.themoep</groupId>
        <artifactId>minedown-adventure</artifactId>
        <version>1.7.3-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
Legacy BungeeCord-chat library

The original BungeeCord-chat library is no longer maintained and has been replaced by this adventure implementation. If you need to still use the legacy version (found on the legacy branch), you can include it like this:

<dependencies>
    <dependency>
        <groupId>de.themoep</groupId>
        <artifactId>minedown</artifactId>
        <version>1.7.1-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

Relocation

<build>
    <plugins>
        <plugin>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <relocations>
                    <relocation>
                        <pattern>de.themoep.minedown</pattern>
                        <shadedPattern>your.package.path.libraries.minedown</shadedPattern>
                    </relocation>
                </relocations>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Alternative to shading

Alternatively you can also directly depend on my MineDownPlugin instead of shading in this library! MineDownPlugin includes a non-relocated version of this library.

License

MineDown is licensed under the MIT open source license:

Copyright (c) 2024 Max Lee (https://github.com/Phoenix616)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

minedown's People

Contributors

phoenix616 avatar tangjin0418 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

minedown's Issues

stringify do not work on rgb color

What is happening?

MineDownStringifier.class

stringify(Component component) will not transform hex color

What did you expect to happen?

transform hex color

Version

1.7.1

Config

no

Server/system Version

idea

Log

no

What other programs/plugins are you running?

no

Additional context

No response

Adventure branch - MineDown#replaceFirst method

Is your feature request related to a problem? Please describe.

Yes, currently there's no way to replace placeholders in such string: [Player %player% has felt from %distance% meters!](color=rainbow)

Describe the solution you'd like

Port of MineDown#replaceFirst from master to kyori-adventure

Describe alternatives you've considered

Additional context

ServerListPlus fork won't support more than 3 hex color codes per motd line

Hey, this is in regards to your ServerListPlus fork supporting hexadecimal color codes through your MineDown library, on mc 1.16.3, waterfall (bungee).

I'm asuming the library is shaded into your SLP fork, and all I need in addition to your fork is ProtocolLib updated.

In ServerListPlus.yml, configuring an motd like this:

Personalized:
  Description:
  - |-
    &aM&#55FF55&i&#55FF55&t&#55FF55&h&#55FF55&randircraft
                  &#2CFF00&¡Hola de nuevo &l%player%!

will make the 4th hexcode on the first line show as text instead of formatting the following text.
Only setting 3 formatting hexcodes will work fine. It seems like there's a per-line limit. It also doesn't matter if the hexes are diferent, I set them all to the same because I was trying to figure out what's wrong.
The second line works fine, and it's not because it's a diferent hex, but rather that it's a new line.

Also, I had to set the first letter's (M) color with a regular standard minecraft color code, because it wouldn't work otherwise for whatever reason (that's another issue).

I wanted to make some gradient-like effects, but I can't like this. Am I doing it wrong or is there an issue / limitation here?

In essence, how do you make gradients using your fork? Is it even possible?
imagen

Add way to toggle replaceFirst per plugin/globally

Is your feature request related to a problem? Please describe.

One might want to use replaceFirst with all MineDown instances e.g. so that placeholders can work in gradients/rainbows.

Describe the solution you'd like

Either a per plugin setting or even a system property which toggles that.

Describe alternatives you've considered

Using a custom wrapper class or extending and overriding the replace method.

Additional context

#13

Escaping of closing ] does not work

I'm using the current development version (self-compiled from master, commit: 221391e).

I tried the string [\]](gray), resulting in white []](gray) instead of gray ].
Further tests resulted in following:

  • [\](gray) becomes white [\](gray) (as expected)
  • [](gray) becomes (gray?) nothingness (as expected)
  • [\[](gray) becomes gray [ (as expected)

It seems that escaping blocks the interpretation of a []() pair, but also closes a previously opened [, preventing formation.

I tested by using a BungeeCord Plugin that registered the following command:

public class TestMineDownCommand extends Command {

    public TestMineDownCommand() {
        super("minedown", null, "md");
    }

    @Override
    public void execute(CommandSender sender, String[] args) {
        sender.sendMessage(new MineDown(String.join(" ", args)).toComponent());
    }
}

Replacements are broken by colour code gradients.

Used Version

1.7.0-SNAPSHOT

Environment description

Windows 10
Java 11

What is happening?

"&e&lClass &8&l»&#ff0-#fff& %gifter% &7has blessed you with extra hearts!"
The %gifter% isn't replaced when there is a gradient across it.

What did you expect to happen?

I expected the %gifter% to be replaced by whatever I specify in my program

Additional context

Restricting what syntax options are enabled

Hi, I'm looking to use MineDown, but I don't see any way to limit what elements can be parsed/rendered; e.g. I'd rather not give players the ability to make command links or the ability to colour their chat, but I'm OK with normal links and bold/italic/etc.

NoClassDefFoundError: net/md_5/bungee/api/chat/KeybindComponent in 1.8

[14:12:19 WARN]: org.apache.commons.lang.UnhandledException: Plugin ForceResourcepacks v1.10.3 (build #431) generated an exception while executing task 1791
at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:56)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoClassDefFoundError: net/md_5/bungee/api/chat/KeybindComponent
at de.themoep.resourcepacksplugin.bukkit.libs.minedown.Replacer.replaceIn(Replacer.java:207)
at de.themoep.resourcepacksplugin.bukkit.libs.minedown.Replacer.replaceIn(Replacer.java:194)
at de.themoep.resourcepacksplugin.bukkit.libs.minedown.MineDown.toComponent(MineDown.java:127)
at de.themoep.resourcepacksplugin.bukkit.libs.minedown.MineDown.parse(MineDown.java:106)
at de.themoep.resourcepacksplugin.bukkit.WorldResourcepacks.getComponents(WorldResourcepacks.java:495)
at de.themoep.resourcepacksplugin.bukkit.WorldResourcepacks.sendMessage(WorldResourcepacks.java:565)
at de.themoep.resourcepacksplugin.bukkit.WorldResourcepacks.sendMessage(WorldResourcepacks.java:560)
at de.themoep.resourcepacksplugin.core.PackManager.lambda$generateHashes$0(PackManager.java:916)
at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftTask.run(CraftTask.java:53)
at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:53)
... 3 more

Bold formatting not reset

Used Version

1.7.2-SNAPSHOT

Config

Not Applicable

Environment description

  • macOS Ventura
  • Shaded inside a LevelledMobs v4 alpha build (not released to SpigotMC.org)
  • Java
  • English
  • Server version:
This server is running Paper version git-Paper-365 (MC: 1.19.3) (Implementing API version 1.19.3-R0.1-SNAPSHOT) (Git: 90750a6)
You are 5 version(s) behind
Download the new version at: https://papermc.io/downloads
Previous version: git-Paper-343 (MC: 1.19.3)

Full Log

Not Applicable

What other programs/plugins are you running?

  • LevelledMobs version 4 dev build (not available on SpigotMC.org) which is using MineDown. Can distribute if desired, though should not be relevant.

What is happening?

When parsing text like this: &8&lTest &dTest

Or even with a reset: &8&lTest&r &dTest

The part after &d remains bold.

Screenshot

What did you expect to happen?

The part after &d should not be bold, the formatting should be reset when a new legacy color is entered.

Additional context

Also an issue on v1.7.3-SNAPSHOT

Thanks so much for creating and maintaining MineDown. This is hands down one of my favourite libraries!

Gradient support

Is your feature request related to a problem? Please describe.

It would be cool to be able to easily create gradients/rainbows like this via some syntax.

Describe the solution you'd like

Unless some better syntax turns up I would just use something like [text](gradient=#startcolor-#endcolor) or simply [text](color=rainbow) with maybe some additional settings.

Describe alternatives you've considered

Manually creating the rainbow/gradient with some other website and converting it to the MineDown syntax.

Additional context

https://docs.adventure.kyori.net/minimessage.html#rainbow 👀

Make adventure artifact the main one and deprecate bungeecord-chat

Currently there are two different maven artifacts and branches, the master one with bungeecord-chat as the component adapater and the kyori-adventure one which uses adventure.

In order to support as many platforms as possible the adventure branch is the one with the most usefulness for the community at large seeing as adventure is supported either natively or via adapters in pretty much every Minecraft-related plugin, modding or proxy API.

A possible plan for shifting the focus completely to adventure could be as simple as renaming the current minedown-adventure artifact to just minedown but with a version increased to 2.0 seeing as it would be a major update which would require changes by developers. The old 1.x versions of that artifact could be maintained for a bit longer to fix serious bugs if they occur but not receive new updates.

Main issue with that would be that projects which use minedown-adventure right now would not get those upgrades automatically, maybe an update could be pushed to that artifact which deprecates stuff? Unfortuantely maven doesn't really offer deprecation notices... alternatively minedown-adventure could be continued to be used as the artifact name but that could be confusing in the long-run.

Minedown doesn't parse properly

Used Version

MineDown 1.7.1-SNAPSHOT

Environment description

1.16 Server with Java 8

What is happening?

So I'm using your amazing libs to parse hex color easily, but unfortunately I ran into an issue, the issue is minedown doesn't properly parse the color, from the screenshot below, the text color does change to the color that I wanted but the text isn't bolded.

What did you expect to happen?

In this case, the text should be bolded with the hex color applies to the text

Additional context

The string that I'm trying to parse &#96eeff&lFossils

And here's the code that I use to parse the color using Minedown

    public static String color(String message) {
        return BaseComponent.toLegacyText(MineDown.parse(message));
    }

How to make RGB color in hover text

How to make RGB color in hover text?
Example: MineDown.parse("[test to home](run_command=/home show_text=&#BFD44Atp to home color=#FFD44A)") Doesn't change color on hover

Add support for Forge's ITextComponent

Is your feature request related to a problem? Please describe.

There's no alternative to this library on Forge and this library doesn't support Forge (or just default minecraft text components)

Describe the solution you'd like

I'd want the library to have support for converting string text (with the same format as on other platforms) to Minecraft's ITextComponent

Describe alternatives you've considered

No alternatives

Additional context

None

HEX coloring doesn't work correctly.

Used Version

    compileOnly("net.kyori:adventure-api:4.0.0-SNAPSHOT")
    compileOnly("net.kyori:adventure-text-serializer-gson:4.0.0-SNAPSHOT")
    compileOnly("net.kyori:adventure-platform-bukkit:4.0.0-SNAPSHOT")
    compileOnly("de.themoep:minedown-adventure:1.6.1-SNAPSHOT")

Config

Code

class PlayerChatListener(override val plugin: ChatPlugin) : KListener<ChatPlugin> {
    private val audience = BukkitAudiences.create(plugin)
    var chatServiceProvider = plugin.server.servicesManager.getRegistration(Chat::class.java) as RegisteredServiceProvider<Chat>

    init {
        event<AsyncPlayerChatEvent> {
            this.recipients.clear()
            var component = MineDown.parse("[%prefix%%displayname% &8» &7%message%](&7Click to DM! suggest_command=/msg %name% )")
            val messageComponent = MineDown("")

            if (!player.hasPermission("chat.color")) {
                messageComponent.parser().disable(MineDownParser.Option.LEGACY_COLORS)
            }

            if (!player.hasPermission("chat.simple")) {
                messageComponent.parser().disable(MineDownParser.Option.SIMPLE_FORMATTING)
            }

            if (!player.hasPermission("chat.advanced")) {
                messageComponent.parser().disable(MineDownParser.Option.ADVANCED_FORMATTING)
            }

            component = Replacer.replaceIn(component, "message", messageComponent.parser().parse(this.message).asComponent())
            component = Replacer.replaceIn(component, "prefix", MineDown.parse(chatServiceProvider.provider.getPlayerPrefix(this.player)))
            component = Replacer.replaceIn(
                    component,
                    "displayname", this.player.displayName,
                    "name", this.player.name,
            )
            audience.all().sendMessage(component)

        }
    }
}

Environment description

Ubuntu 20.04, API accessed using Kotlin. Server version paper-204.

Full Log

[00:14:57 INFO]: ROOT CDFN » &#6662
[00:14:58 INFO]: <CDFN> &#666&12
[00:15:23 INFO]: ROOT CDFN » &#666&test_message
[00:15:23 INFO]: <CDFN> &#666&test_message
[00:15:55 INFO]: ROOT CDFN » test_message
[00:15:56 INFO]: <CDFN> &gold&test_message
[00:21:37 INFO]: ROOT CDFN » &#ff00ff&text
[00:21:37 INFO]: <CDFN> &#ff00ff&Text

What other programs/plugins are you running?

image
Only OneBlock-chat does stuff with MineDown, OneBlock-fancyresources has some replacements using Adventure in it.

What is happening?

When using &#666&test_message syntax, message doesn't get colored. It happens only with rgb, &gold&test_message syntax works correctly. Full HEX syntax (#ff00ff&Text) doesn't work either.

What did you expect to happen?

&#666&test_message displays as test_message with #666 HEX color on it.

Additional context

&#666&test_message:
image
&gold&test_message:
image

Formatting breaks when &<code>& has supported legacy code at the end.

Used Version

Using MineDown through ServerListPlus fork 3.5.0-SNAPSHOT

Config

#      _____                     __    _     _   _____ _
#     |   __|___ ___ _ _ ___ ___|  |  |_|___| |_|  _  | |_ _ ___
#     |__   | -_|  _| | | -_|  _|  |__| |_ -|  _|   __| | | |_ -|
#     |_____|___|_|  \_/|___|_| |_____|_|___|_| |__|  |_|___|___|
# 
# ServerListPlus v3.4.8 - http://git.io/slp

# More information is available in the Wiki: http://git.io/slp-wiki


# This is the section where you can customize your server status ping!
#  - Default is the section for the status used when the player name is unknown.
#    Personalized is used if the client has already joined the server once.
#    Use %player% as placeholder for the player's name.
# 
# Features:
#  - Description (MotD): A short status message for your server, max. 2 lines.
#  - Players:
#    - Hover: The player hover message that is displayed if you hover the player count.
#    - Slots: Custom player slot formatting, see http://git.io/slp-slots
#  - Favicon:
#    - Use multiple server icons or the player's head as favicon, see http://git.io/oMhJlg
#    - Possible favicon sources: Files, Folders, URLs, Heads, Helms, Encoded
# 
#  More features are explained in the Wiki: http://git.io/slp-config
# 
# Usage:
#  - Add multiple entries for random messages.
#  - Save the file with valid UTF-8 encoding for special characters.
#  - Available placeholders:
#    - Player name: %player%
#    - Player count: %online%, %max%, %online@server% %online@world%
#    - Random online player name: %random_player%
--- !Status
Default:
 Description:
 - |-
   &7[&#F39C12&1.16.4&7] &#F39C12&PowerPlugins.net
   &7Join and test awesome plugins
 - |-
   &7[&#F39C12&1.16.4&7] &#F39C12&PowerPlugins.net
   &7Newest plugin: &#F39C12&ArmorStand Adjustor
 - |-
   &7[&#F39C12&1.16.4&7] &#F39C12&PowerPlugins.net
   &7MOTD provided by &#F39C12&ServerListPlus
 - |-
   &7[&#F39C12&1.16.4&7] &#F39C12&PowerPlugins.net
   &7The hottest server out there!
 Players:
   Hover:
   - |-
     &7Welcome to &#F39C12&PowerPlugins.net&7!
     &7
     &7We are a Public Test Server for CraftBukkit,
     &7Spigot and PaperMC plugins alike.
     &7You can test out both free and paid plugins
     &7at no costs for you!
     &7
     &7Just join this server and use &#F39C12&/pl
     &7to get started.
     &7
     &7Have fun!
Personalized:
 Description:
 - |-
   &7[&#F39C12&1.16.4&7] &#F39C12&PowerPlugins.net
   &7Join and test awesome plugins
 - |-
   &7[&#F39C12&1.16.4&7] &#F39C12&PowerPlugins.net
   &7Newest plugin: &#F39C12&ArmorStand Adjustor
 - |-
   &7[&#F39C12&1.16.4&7] &#F39C12&PowerPlugins.net
   &7MOTD provided by &#F39C12&ServerListPlus
 - |-
   &7[&#F39C12&1.16.4&7] &#F39C12&PowerPlugins.net
   &7The hottest server out there!
 Players:
   Hover:
   - |-
     &7Welcome to &#F39C12&PowerPlugins.net&7!
     &7
     &7We are a Public Test Server for CraftBukkit,
     &7Spigot and PaperMC plugins alike.
     &7You can test out both free and paid plugins
     &7at no costs for you!
     &7
     &7Just join this server and use &#F39C12&/pl
     &7to get started.
     &7
     &7Have fun!

# Stats: Enable/disable sending plugin statistics.
# PlayerTracking: Enable/disable tracking of player names to their IP-Addresses.
#   - Persistence can be disabled with the toggle in the Storage section.
# Samples: Toggle using multiple player infos for the player hover message.
#     May prevent the annoying ... and x more ... message for bigger servers
#     DynamicPlayers is special and aligns the number with the number of
#     random players used in placeholders.
# Unknown: Placeholder replacement if the real value is unknown.
# Favicon: Options for the creation / downloading of favicons:
#  - RecursiveFolderSearch: Also search for favicons in sub directories.
#  - SkinSource: The URL to get the Minecraft Skins from. (%s -> player name)
#  - ResizeStrategy: The strategy used to resize too small or too big favicons.
#      NONE (keep them as is, will probably fail), SCALE (scale them to the correct size)
--- !Plugin
Stats: true
PlayerTracking:
 Enabled: true
 Storage: !JSONStorage
   Enabled: true
   SaveDelay: 5m
Samples:
 Multiple: true
 DynamicPlayers: false
Unknown:
 PlayerName: player
 PlayerCount: ???
 Date: ???
Favicon:
 Timeout: 10s
 RecursiveFolderSearch: false
 ResizeStrategy: SCALE

Environment description

Ubuntu 20.04
PaperMC 277 (MC 1.16.4

Full Log

Not needed

What other programs/plugins are you running?

What is happening?

When using the &<code>& syntax for defining colors such as HEX colors does it seem to first parse legacy colors followed by the codes, which may have been broken due to this fact.

As an example, the line &7[&#F39C12&1.16.4&7] &#F39C12&PowerPlugins.net appears like this:
image

My guess is, that MineDown, if responsible at all, parses legacy colors, such as &1 first, which turns the ampersand into a section symbol (§) which therefore breaks any &<code>& color code.

What did you expect to happen?

MineDown should first parse its own custom color formats to prevent any unwanted overrides happening.

Additional context

Support cross-platform abstraction

I'd like to target multiple platforms with my resources (spigot, sponge, velocity, etc) and would like the convenience of being able to use MineDown in a platform-agnostic way, which isn't currently possible -- I have to target the Adventure or Bungee Component implementation.

I know adventure has sort of become the standard, but alas Spigot and Bungee remains the largest userbase. I think it'd be nice if instead of being in a separate branch and being treated separately if the adventure/bungee branches were in separate modules, as implementations of a common module of MineDown interface(s), while still maintaining their platform-specific features.

Is this something that would interest you? (may also want to move away from maven if so)

Minedown generating abnormally excessive components during message file parsing with legacy selectors

I came from a teleport plugin and the developer suggested that I submit an issue here.

WiIIiam278/HuskHomes#209

Used Version

HuskHome3.x.

Config

Config
[I think it should not be the configuration of HuskHome]

Environment description

Windows, Chinese.

Full Log

Log
[i didn't know they were there]

What other programs/plugins are you running?

HuskHomes.

What is happening?

MineDown messages I set: [§b[§a%1%§b]](show_text=§a/warp§b %1% run_command=/warp %1%).
In this plugin, it outputs these texts:
image

{"extra":[{"color":"aqua","text":"IpacEL "},{"color":"white","text":"\u003e "},{"color":"aqua","text":"服务器的地标 ["},{"color":"green","text":"1"},{"color":"gray","text":"/"},{"color":"green","text":"47  "},{"color":"aqua","text":"共"},{"color":"green","text":"77"},{"color":"aqua","text":"个]:\n"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 0"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 0"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"0"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 0"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 11"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 11"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"11"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 11"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 12"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 12"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"12"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 12"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 13"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 13"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"13"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 13"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 14"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 14"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"14"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 14"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 15"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 15"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"15"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 15"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 16"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 16"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"16"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 16"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 17"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 17"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"17"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 17"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 18"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 18"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"18"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 18"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 19"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 19"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"19"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 19"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 1"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 1"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"1"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 1"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 20"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 20"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"20"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 20"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 21"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 21"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"21"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 21"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 22"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 22"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"22"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 22"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 23"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 23"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"23"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 23"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 24"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 24"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"24"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 24"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 25"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 25"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"25"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 25"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 26"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 26"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"26"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 26"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 27"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 27"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"27"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 27"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 28"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 28"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"28"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 28"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 29"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 29"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"29"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 29"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 2"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 2"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"2"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 2"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 30"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 30"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"30"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 30"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 31"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 31"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"31"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 31"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 32"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 32"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"32"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 32"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 33"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 33"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"33"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 33"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 34"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 34"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"34"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 34"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 35"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 35"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"35"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 35"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 36"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 36"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"36"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 36"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 37"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 37"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"37"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 37"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 38"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 38"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"38"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 38"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 39"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 39"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"39"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 39"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 3"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 3"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"3"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 3"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 40"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 40"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"40"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 40"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 41"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 41"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"41"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 41"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 42"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 42"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"42"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 42"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 43"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 43"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"43"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 43"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 44"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 44"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"44"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 44"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 45"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 45"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"45"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 45"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 46"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 46"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"46"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 46"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 47"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 47"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"47"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 47"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 4"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 4"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"4"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 4"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 5"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 5"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"5"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 5"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 6"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 6"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"6"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 6"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 7"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 7"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"7"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 7"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 8"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 8"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"8"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 8"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":""},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 9"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"["},{"color":"green","clickEvent":{"action":"run_command","value":"/warp 9"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"9"},{"color":"aqua","clickEvent":{"action":"run_command","value":"/warp 9"},"hoverEvent":{"action":"show_text","contents":[{"text":"warp"}]},"text":"]"},{"color":"aqua","text":"\n"},{"color":"aqua","text":"IpacEL "},{"color":"white","text":"\u003e "},{"color":"gray","text":""},{"color":"gray","hoverEvent":{"action":"show_text","contents":[{"text":"上一页"}]},"text":"[\u003c-]"},{"color":"gray","text":" "},{"color":"gray","text":""},{"color":"#ffffff","clickEvent":{"action":"run_command","value":"/huskhomes:warplist 2"},"hoverEvent":{"action":"show_text","contents":[{"text":"下一页"}]},"text":"[-\u003e]"},{"color":"gray","text":" "},{"color":"white","text":"1"},{"color":"gray","text":"/"},{"color":"white","text":"2  "}],"text":""}

What did you expect to happen?

json text should be small and no loops.

Additional context

no output error.

Bad syntax parse

Used Version

1.7.1 for Spigot/BungeeCord

Config

There's no config

Environment description

Using it on the latest waterfall version

Full Log

No issues shown on console

What is happening?

A character is bold when it shouldn't be.

What did you expect to happen?

The character to be resetted

Additional context

Full message: "&d» &eHráč &7%player% &eti poslal žádost o přátelství. [&a[&a&l✔&a]](show_text=&7Kliknutím přijmeš žádost o přátelství. run_command=/f accept %player%) [&c[&c✖&c]](show_text=&7Kliknutím odmítneš žádost o přátelství. run_command=/f deny %player%)"

"[&a[&a&l✔&a]](show_text=&7Kliknutím přijmeš žádost o přátelství. run_command=/f accept %player%) - Normal behavior would be that the last visible parenthesis shouldn't be bold, but it looks bold ingame https://media.discordapp.net/attachments/924090640797696090/966746240815620096/unknown.jpg

This also happens putting &r before or with markdown syntax: [&a[&a**✔**&a]]. It even happens when scaping the parenthesis

Smallcaps Automatically

Is your feature request related to a problem? Please describe.

When I want to use smallcaps I always have to copy the letters and paste the strange unicodes into my code.

Describe the solution you'd like

Some format to make text smallcaps.

Describe alternatives you've considered

No response

Additional context

No response

[Feature Request] Support for TranslatableComponent

Is your feature request related to a problem? Please describe.

MineDown seems doesn't support TranslatableComponent.

Describe the solution you'd like

Foo [TextWillBeReplaced](translation_key=item.minecraft.diamond_sword) Bar.

Preview:

Foo Diamond Sword Bar.

Describe alternatives you've considered

Nope.

Additional context

Nothing.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.