COWMODSКаталог модов

PrismaticAPI

Versatile library for advanced color manipulation and text formatting in Bukkit/Spigot/Paper plugins.

Автор: CroaBeast3821обновлён 18 авг. 2026 г.
БиблиотекиОбщениеУтилиты

Описание

1

2

3+4

5

6

7

8

9+10

11

12

Text Description

🌈 PrismaticAPI

The ultimate text-formatting engine for Bukkit/Paper plugins.

RGB colors · Gradients · Rainbows · MiniMessage · Interactive Messages

Version Minecraft Java Adventure


✨ What Is PrismaticAPI?

PrismaticAPI is a Bukkit/Paper text-formatting library that gives your plugin beautiful, modern text without the headache. One shared engine powers both legacy Bukkit strings and Adventure components — gradients, rainbows, per-player hex fallback, MiniMessage compatibility and interactive click/hover events all included.


🚀 Features

  • 🎨 Multiple RGB syntaxes — {#ff8800}, %#ff8800%, [#ff8800], <#ff8800>, &#ff8800, #ff8800, &xff8800
  • 🌈 Gradient & Rainbow tags — color transitions per character, across as many color stops as you want
  • 💬 MiniMessage integration — mix Prismatic tags and MiniMessage tags in the same string (optional at runtime)
  • 🔮 Adventure support — produce net.kyori.adventure.text.Component output from the same pipeline, fully optional
  • 🕹️ Interactive messages — Element: parsed once, click events, hover text, hover items, placeholders, URL auto-detection
  • 🧠 Player-aware formatting — VNC + ViaVersion integration to serve hex or legacy output depending on the player's Minecraft version
  • 🛡️ Safe by design — Adventure is never required; the library boots cleanly even when it's absent
  • ⚡ Backwards compatible — the classic PrismaticAPI.colorize(...) methods still work unchanged

📦 How to Import

Gradle (Kotlin DSL)

repositories {
    maven("https://croabeast.github.io/repo/")
}

dependencies {
    implementation("me.croabeast:PrismaticAPI:1.5.0")
}

Gradle (Groovy DSL)

repositories {
    maven { url 'https://croabeast.github.io/repo/' }
}

dependencies {
    implementation 'me.croabeast:PrismaticAPI:1.5.0'
}

Maven

<repository>
    <id>croabeast-repo</id>
    <url>https://croabeast.github.io/repo/</url>
</repository>

<dependency>
    <groupId>me.croabeast</groupId>
    <artifactId>PrismaticAPI</artifactId>
    <version>1.5.0</version>
</dependency>

Tip: If your plugin uses PrismaticAPI.adventure(), keep the Adventure API on your compile classpath and make sure the required Adventure runtime classes are present at startup.


🧩 Supported Syntax

🎨 Single RGB Colors

SyntaxExample
Curly braces{#ff8800}
Percent signs%#ff8800%
Square brackets[#ff8800]
Angle brackets<#ff8800>
BungeeCord hex&xff8800
Plain hex#ff8800
Ampersand hex&#ff8800

🌈 Gradients

<g:ff0000>Hello world</g:0000ff>
<gradient:ff0000>Hello world</gradient:0000ff>
<#ff0000>Hello world</#0000ff>
<#ff0000:#00ff00:#0000ff>Hello world</gradient>   ← multi-stop!

🌀 Rainbows

<rainbow:1>Hello world</rainbow>
<r:1>Hello world</r>

📜 Legacy Formatting

&a  green        &l  bold
&c  red          &n  underline
&6  gold         &o  italic
&r  reset        &k  obfuscated

📝 MiniMessage (when Adventure is present)

Standard MiniMessage tags (<bold>, <red>, <gradient:...>, etc.) can be freely mixed with Prismatic tags in the same string.


📖 Quick Start

🟢 Legacy strings (always safe)

// Basic colorize
String colored = PrismaticAPI.colorize(player, "<g:ff0000>Hello</g:0000ff> &lworld!");
player.sendMessage(colored);

// Using the facade directly
Formatter<String> legacy = PrismaticAPI.legacy();

String gradient = legacy.applyGradient("Sunset",  new Color(255, 100, 0), new Color(255, 0, 100), false);
String rainbow  = legacy.applyRainbow("Colorful!", 1.0f, false);
String solid    = legacy.applyColor(new Color(0, 200, 255), "Aqua text", false);

🔵 Adventure components (optional)

if (PrismaticAPI.isAdventureAvailable()) {
    Formatter<Component> adv = PrismaticAPI.adventure();
    Component component = adv.colorize(player, "<rainbow:1>PrismaticAPI</rainbow>");
    player.sendMessage(component); // Paper native API
}

🖱️ Interactive messages

Element is the single message type. Parse once, render per player:

// Markup format: <action:"argument">text</text>
Element menu = Element.parse(
        "<run:\"/spawn\">&aGo to Spawn</text>" +
        " &7| " +
        "<suggest:\"/msg \">&bSend a Message</text>"
);

player.spigot().sendMessage(menu.bungee(player));
player.sendMessage(menu.legacy(player));

Build one by hand:

Element button = Element.text("Click me!")
        .toBuilder()
        .color("#ff8800")
        .click("run", "/help")
        .hover("&eOpen help menu", "&7Uses Prismatic colors")
        .build();

player.spigot().sendMessage(button.bungee(player));

Supported click actions in markup: execute / click / run / suggest / url / file / page / copy


🕹️ Element In Depth

Element is the single message type. It is immutable and parsed once: the interactive markup, the bare URLs and the placeholder tokens are located at parse time, and every later render reuses that work. Keep one instance per config entry and hand it to every player.

Element line = Element.parse("<g:ff8800>Welcome</g:00ffaa> &7{player}");

player.sendMessage(line.legacy(player));                 // legacy String
player.spigot().sendMessage(line.bungee(player));        // BaseComponent[]

Adventure output lives in a separate class on purpose, so a server without the Adventure runtime never loads a Kyori class by touching an element:

if (PrismaticAPI.isAdventureAvailable()) {
    Component c = AdventureElement.render(line, player);
}

🏗️ Building

Mutation goes through Element.Builder, so a shared instance can never change underneath another consumer. Style and event calls apply to the last appended segment.

Element button = Element.builder()
        .append("Spawn")
        .color("#00ffaa")
        .bold()
        .click(Click.RUN_COMMAND, "/spawn")
        .hover("&7Go to spawn", "&8/spawn")
        .build();

// derive from an existing element without touching it
Element louder = button.toBuilder().append(" &c!").build();
Builder methodWhat it does
append(String)Adds literal text as a new segment
appendMarkup(String)Parses interactive markup and adds the segments
append(Element)Adds the segments of another element
raw(String)Replaces the text of the last segment, keeping its events
color / bold / italic / underlined / strikethroughStyles the last segment
click / hover / hoverItemAttaches events to the last segment
clickAll / hoverAllApplies an event to every segment
clearClick / clearHoverRemoves an event from the last segment
autoLinkUrl()Gives the last segment an OPEN_URL click from the first URL in its text

🖱️ Click events

The Click enum carries no platform type: the mapping to Bungee or Adventure happens inside the matching renderer.

ConstantString aliasesWhat it does
RUN_COMMANDexecute, click, run, run_commandRuns a command as the player
OPEN_URLopen_url, urlOpens a URL in the browser
OPEN_FILEopen_file, fileOpens a file on the client machine
SUGGEST_COMMANDsuggest, suggest_commandInserts text into chat without sending
CHANGE_PAGEchange_page, pageFlips a book page
COPY_TO_CLIPBOARDclipboard, copy, copy_to_clipboardCopies text to clipboard
builder.click(Click.OPEN_URL, "https://example.com");  // enum constant
builder.click("url", "https://example.com");           // string alias
builder.click("run:/spawn");                           // compact "action:payload"

An unknown or blank alias resolves to SUGGEST_COMMAND.


💬 Hover

Text hover accepts varargs, a List<String>, or a single string using the <n> separator:

builder.hover("&eLine one", "&7Line two");
builder.hover(Arrays.asList("&eLine one", "&7Line two"));
builder.hover("&eLine one<n>&7Line two");

Item hover takes raw SNBT/NBT JSON, or a Base64 payload prefixed with b64: to avoid escaping issues:

builder.hoverItem("{id:\"minecraft:diamond_sword\",Count:1b}");
builder.hoverItem("b64:" + Base64.getUrlEncoder().withoutPadding().encodeToString(nbt.getBytes(UTF_8)));

🏷️ Markup format

<action:"argument">visible text</text>
<action:"arg1"|action2:"arg2">visible text</text>
  • The opening tag holds one or two action:"argument" pairs separated by |.
  • The closing tag is always </text>.
  • Supported actions: every click alias from the table above, plus hover and hover_item.
<!-- click only -->
<run:"/spawn">Go to Spawn</text>

<!-- hover only -->
<hover:"&eThis is hover text<n>&7Second line">Hover over me</text>

<!-- item hover only -->
<hover_item:"{id:\"minecraft:diamond\",Count:1b}">A diamond</text>

<!-- click + hover (pipe-separated) -->
<run:"/spawn"|hover:"&eTeleport home">Go Home</text>

Utilities around the markup:

Element.isMarkup(raw);          // does the text contain interactive tags?
Element.stripMarkup(raw);       // drop the tags, keep the visible text
element.toMarkup();             // serialize back; re-parses to an equivalent element

Custom formats

MarkupFormat is the parsing strategy. Note that accept takes no player: parsing happens once and cannot depend on who receives the message.

Element parsed = Element.parse(raw, myFormat);

🧩 Placeholders

Tokens shaped {name} and %name% survive parsing as data and are resolved at render time. This is what lets a gradient span the resolved value instead of the length of the token:

Element line = Element.parse("<g:ff0000>Hello {player}</g:00ff00>");

RenderContext ctx = RenderContext.of(player, name ->
        "player".equals(name) ? player.getName() : null);

player.sendMessage(line.legacy(ctx));

A resolver returning null leaves the original token in place. Tokens starting with # are Prismatic color syntax, not placeholders, so {#ff8800} and %#ff8800% are never touched.


⚡ Render cache

There are only two color profiles, Target.HEX and Target.LEGACY, so each segment caches its colorized text in two slots. An element rendered to a hundred players pays the color pipeline twice.

The cache is skipped when a render actually resolves placeholders, or when a custom formatter is supplied via RenderContext.withFormatter(...).

toString() returns the raw text and never renders — it is called by string concatenation, logging and debuggers, none of which should trigger a render or need a player.


🔗 URL auto-detection

Element.parse turns any bare URL (http://, https:// or www.) in a non-markup span into its own segment with an OPEN_URL click. On a builder, call autoLinkUrl() explicitly. An explicit click always wins.


🎨 Color continuity

When a segment does not begin with an explicit color code, the last color of the previous segment is prepended automatically. This prevents unexpected white resets between segments:

"&aGreen text</text> and more text</text>"
                          ↑ automatically gets &a prepended

⚙️ Formatting Pipeline

PrismaticAPI processes text in this exact order:

Input string
    │
    ├─ 1. MiniMessage  ──────────── (only when Adventure is present)
    ├─ 2. Prismatic multi-color ─── gradients & rainbows
    ├─ 3. Single RGB codes ───────── {#ff8800}, <#ff8800>, &xff8800 …
    └─ 4. Legacy Bukkit codes ────── &a, &l, &r …
          │
          ▼
    Formatted output

This order lets MiniMessage and Prismatic tags coexist without requiring Adventure on every runtime.


🔧 Utility Methods

Both legacy() and adventure() facades expose the same helpers:

MethodDescription
fromString(hex)Parse a color token or hex string into ChatColor
stripBukkit(string)Remove &a, §a-style codes
stripSpecial(string)Remove bold, italic, underline, etc.
stripRGB(string)Remove gradient / rainbow / single-RGB syntax
stripMiniMessage(string)Remove MiniMessage tags
stripAll(string)Remove everything — returns plain text
startsWithColor(string)true if the formatted string begins with a color code
getStartColor(string)First color code in the formatted string
getEndColor(string)Last color code in the formatted string

⚠️ Important Behavior Notes

colorize(String) is conservative

When called without a Player, PrismaticAPI cannot detect whether the receiver supports hex, so it downgrades to the nearest legacy color. For player-aware output:

// ✅ player-aware: preserves RGB when the player's version supports it
String formatted = PrismaticAPI.legacy().colorize(player, raw);

// ⚠️ no player context: legacy fallback always
String formatted = PrismaticAPI.colorize(raw);

Adventure is always optional

PrismaticAPI runs perfectly without Adventure. Only PrismaticAPI.adventure() requires it. Guard the call:

if (PrismaticAPI.isAdventureAvailable()) {
    // safe to call PrismaticAPI.adventure()
}

Required Adventure classes at runtime:

  • net.kyori.adventure.text.Component
  • net.kyori.adventure.text.minimessage.MiniMessage
  • net.kyori.adventure.text.minimessage.tag.resolver.TagResolver
  • net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer

🔄 Migration from 1.3.x

Old APINew API
PrismaticAPI.colorize(player, raw)Unchanged ✅
PrismaticAPI.applyGradient(...)Unchanged ✅
RichText text = PrismaticAPI.colorizeText(player, raw)PrismaticAPI.adventure().colorize(player, raw)
text.component()Result of adventure().colorize(...) is already a Component
applyColorText(...)PrismaticAPI.adventure().applyColor(...)
applyGradientText(...)PrismaticAPI.adventure().applyGradient(...)
applyRainbowText(...)PrismaticAPI.adventure().applyRainbow(...)

🔄 Migration from 1.5.x

The me.croabeast.prismatic.chat package is gone. Element replaces all of it.

Old APINew API
PrismaticAPI.chatComponent(raw)Element.text(raw).toBuilder()
PrismaticAPI.multiComponent(raw)Element.parse(raw)
ChatComponent / MultiComponentElement (one type; a single segment is not a special case)
component.compile(player)element.bungee(player)
component.setMessage(raw)builder.raw(raw)
component.setClick(Click.EXECUTE, v)builder.click(Click.RUN_COMMAND, v)
component.setHover(...)builder.hover(...)
component.setHoverItem(json)builder.hoverItem(json)
multi.setClickToAll(...)builder.clickAll(...)
multi.setHoverToAll(...)builder.hoverAll(...)
multi.append(raw)builder.appendMarkup(raw)
multi.copy()Not needed; Element is immutable
multi.toFormattedString()element.toMarkup()
ChatFormatMarkupFormat (no Player parameter)
DEFAULT_FORMAT.removeFormat(raw)Element.stripMarkup(raw)
DEFAULT_FORMAT.isFormatted(raw)Element.isMarkup(raw)
ChatComponent.URL_PATTERNElement.URL_PATTERN
ChatProcessor.colorizeRenderContext.withFormatter(...)
ChatProcessor.prepareMarkupFormat.prepare(...)
ChatComponent.Click.EXECUTEClick.RUN_COMMAND (string aliases unchanged)
ChatComponent.Click.SUGGESTClick.SUGGEST_COMMAND
ChatComponent.Click.CLIPBOARDClick.COPY_TO_CLIPBOARD

Two behaviour changes worth knowing:

  • Mutation. The old components mutated in place; Element is immutable. element.toBuilder()...build() returns a new instance, and the original is untouched.
  • Empty messages. compile() documented a non-empty array and padded an empty message with a blank component. Element.text("").bungee() returns an empty array.

🛠️ Building

./gradlew jar

This project depends on VNC (me.croabeast.vnc:VNC:1.2.1) from the CroaBeast Maven repository, which is automatically resolved during the build.


📄 License

See LICENSE for details.


Made with 💜 by CroaBeast

Последние версии

Все версии →
release

Update 2.0.1

2.0.1
18 авг. 2026 г.67Minecraft: 1.8, 1.8.1, 1.8.2, 1.8.3, 1.8.4, 1.8.5, 1.8.6, 1.8.7, 1.8.8, 1.8.9, 1.9, 1.9.1, 1.9.2, 1.9.3, 1.9.4, 1.10, 1.10.1, 1.10.2, 1.11, 1.11.1, 1.11.2, 1.12, 1.12.1, 1.12.2, 1.13, 1.13.1, 1.13.2, 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.15, 1.15.1, 1.15.2, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, folia, paper, purpur, spigot
Скачать
Что нового
## Color Parsing Fixes and Minecraft 26.2 Patch release fixing several color-parsing bugs, and updating the version library so Minecraft 26.2 is recognised. ### Fixed - Fixed the compact hex form `&xff8800` always falling back to **white**. It now resolves to the color it names, the same as the other supported hex formats. - Fixed plain text being pushed through the MiniMessage parser just because it contained a `<`. A legacy header like `&8<&d&l Top &8>` was treated as markup, which changed how its color codes rendered. Only real recognised tags trigger that path now. - Fixed **decorations bleeding** into the rest of a message. A strikethrough or bold code stayed active after the next color code instead of being cleared, the way it works in vanilla chat. - Fixed one of the legacy formatter methods not using the main color parser, so it could return a different color than the rest of the library for the same text. ### Changed - Updated the bundled **VNC** library to `1.3.0`, which recognises **Minecraft 26.2** and its snapshots, and detects more server and mod platforms. ### Notes / Recommendations - This is a drop-in replacement for `2.0.0`. Nothing in the API changed, so plugins built against `2.0.0` keep working. - If you were working around the `&xff8800` format by using a different hex syntax, you can go back to whichever one you prefer.
release

Update 2.0.0

2.0.0
4 авг. 2026 г.40Minecraft: 1.8, 1.8.1, 1.8.2, 1.8.3, 1.8.4, 1.8.5, 1.8.6, 1.8.7, 1.8.8, 1.8.9, 1.9, 1.9.1, 1.9.2, 1.9.3, 1.9.4, 1.10, 1.10.1, 1.10.2, 1.11, 1.11.1, 1.11.2, 1.12, 1.12.1, 1.12.2, 1.13, 1.13.1, 1.13.2, 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.15, 1.15.1, 1.15.2, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, folia, paper, purpur, spigot
Скачать
Что нового
## The Element API Major rewrite of the interactive message system. `Element` replaces the old chat components with a single immutable type that is parsed once and rendered per player, plus a faster color pipeline. Classic `PrismaticAPI.colorize(...)` usage is untouched. ### Added - Added `Element`, one message type for plain text and interactive text. Parse it once, keep the instance, and render it for every player. - Added placeholder support inside elements: `{name}` and `%name%` tokens are kept as data and resolved at render time, so a gradient now spans the resolved value instead of the length of the token. - Added a render cache. Each segment caches its colorized text for the two color profiles (hex and legacy), so an element sent to a hundred players pays the color pipeline twice. - Added `AdventureElement` as a separate class, so a server without Adventure never loads a Kyori class by touching an element. - Added `PrismaticAPI.supportsHexColors(player)` to check whether a player's client can actually receive RGB colors. - Added `PrismaticAPI.forgetPlayer(...)` and `PrismaticAPI.clearPlayerCache()` to drop cached player color capabilities. - Added markup helpers: `Element.isMarkup(raw)`, `Element.stripMarkup(raw)`, `element.toMarkup()`, and `autoLinkUrl()` on the builder. ### Changed - Replaced the `me.croabeast.prismatic.chat` package with `me.croabeast.prismatic.element`. `ChatComponent` and `MultiComponent` are gone; `Element` covers both. - Elements are now immutable. Changes go through `element.toBuilder()`, so a shared instance can never be modified by another consumer. - Renamed three click constants: `EXECUTE` to `RUN_COMMAND`, `SUGGEST` to `SUGGEST_COMMAND`, `CLIPBOARD` to `COPY_TO_CLIPBOARD`. The string aliases (`run`, `suggest`, `copy`, ...) are unchanged. - A player's hex support is now resolved once per session instead of once per formatted line. - Text with no color markers now skips the color passes entirely. - An empty message now renders to an empty array instead of a padded blank component. - Updated the Gradle wrapper to 9.6.1. ### Fixed - Fixed gradients bleeding one color too far when the text started with a hex-prefixed color. - Fixed placeholders not resolving inside click and hover values of an element. ### Notes / Recommendations - This is a breaking release. Any plugin using the old chat components must be updated before it will compile against 2.0.0. - The README includes a full migration table from 1.5.x to 2.0.0, method by method. - Call `PrismaticAPI.forgetPlayer(...)` from your `PlayerQuitEvent` handler so cached entries do not survive the session. - Plugins that only use `PrismaticAPI.colorize(...)` and the Adventure facade need no changes.
release

Update 1.5.0

1.5.0
23 мая 2026 г.97Minecraft: 1.7.2, 1.7.3, 1.7.4, 1.7.5, 1.7.6, 1.7.7, 1.7.8, 1.7.9, 1.7.10, 1.8, 1.8.1, 1.8.2, 1.8.3, 1.8.4, 1.8.5, 1.8.6, 1.8.7, 1.8.8, 1.8.9, 1.9, 1.9.1, 1.9.2, 1.9.3, 1.9.4, 1.10, 1.10.1, 1.10.2, 1.11, 1.11.1, 1.11.2, 1.12, 1.12.1, 1.12.2, 1.13, 1.13.1, 1.13.2, 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.15, 1.15.1, 1.15.2, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2bukkit, folia, paper, purpur, spigot
Скачать
Что нового
## What's Changed - chore: bump version to 1.5.0 by @CroaBeast (4055c41) - refactor: simplify color engine internals by @CroaBeast (e322baa) - chore: consume published VNC dependency by @CroaBeast (ca0f67a) - refactor: extend formatter pipelines for chat by @CroaBeast (335ec67) - feat: add interactive chat components by @CroaBeast (dcfdaa2) - feat: expose chat component factories by @CroaBeast (1ed0eee) - chore: document interactive chat components by @CroaBeast (4896d54) ## Contributors - @CroaBeast **Full Changelog**: https://github.com/CroaBeast/PrismaticAPI/compare/423a5d28573fc2a50064404e39b1f04e92a12ece...1.5.0
release

Update 1.1.0

1.1.0
17 нояб. 2025 г.54Minecraft: 1.8, 1.8.1, 1.8.2, 1.8.3, 1.8.4, 1.8.5, 1.8.6, 1.8.7, 1.8.8, 1.8.9, 1.9, 1.9.1, 1.9.2, 1.9.3, 1.9.4, 1.10, 1.10.1, 1.10.2, 1.11, 1.11.1, 1.11.2, 1.12, 1.12.1, 1.12.2, 1.13, 1.13.1, 1.13.2, 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.15, 1.15.1, 1.15.2, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10bukkit, folia, paper, purpur, spigot
Скачать
Что нового
- Added MiniMessage output methods. - Added 1.21.5+ support.
release

Update 1.0.0

1.0.0
16 апр. 2025 г.122Minecraft: 1.8, 1.8.1, 1.8.2, 1.8.3, 1.8.4, 1.8.5, 1.8.6, 1.8.7, 1.8.8, 1.8.9, 1.9, 1.9.1, 1.9.2, 1.9.3, 1.9.4, 1.10, 1.10.1, 1.10.2, 1.11, 1.11.1, 1.11.2, 1.12, 1.12.1, 1.12.2, 1.13, 1.13.1, 1.13.2, 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.15, 1.15.1, 1.15.2, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5bukkit, paper, purpur, spigot
Скачать