BasaltRanks - Rank Badge Generator v2.2.1

Pixel-art rank badges for chat, nametags & tab with GUI editor, web panel & LuckPerms integration
  • basaltranks-cover-hd.png
  • br-editor.png
  • br-templates.png
  • br-login.png
  • basaltranks-web-dashboard.png
  • basaltranks-cover-hd.png
  • br-editor.png
  • br-templates.png
  • br-login.png
  • basaltranks-web-dashboard.png

BASALTRANKS
Pixel-Art Rank Badge Generator
Custom rank badges in chat, nametags & tab list. No image hosting. No bloat. Just works.

Paper 1.20 — 26.x Folia Ready Java 21+ FREE MIT License



━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


Overview

BasaltRanks generates pixel-art rank badges that display in chat, nametags, and the tab list using Minecraft's resource pack system. Each badge is rendered as a custom Unicode character via bitmap fonts — no external image hosting needed.

5
STYLES
Flat, 3D, Glass
Metallic, Neon
26
TEMPLATES
Staff, Rank
Special, Fun
15+
API ENDPOINTS
Web editor
REST API
8
PLACEHOLDERS
PlaceholderAPI
expansion


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


Features

  • 5 Visual Styles — Flat, 3D, Glass, Metallic, Neon — each with custom colors, gradients, and borders
  • 26 Pre-made Templates — Owner, Admin, Mod, VIP, MVP, Legend, Champion, and many more
  • In-game GUI Editor — Full visual editor with color picker, style selector, and live preview
  • Web-based Editor — Modern browser UI with REST API — auto-starts by default
  • Auto Resource Pack — Built-in HTTP server generates and sends packs automatically on join
  • LuckPerms Integration — Auto-assign badges by group with real-time rank change detection
  • PlaceholderAPI — 8 placeholders ready to use in scoreboards, tab, and more
  • Folia Compatible — Full scheduling support for Folia servers, automatic detection
  • Zero Config — Works out of the box. No database, no setup. Just drop and go.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


Badge Styles

StyleLook
FlatClean solid or gradient background with subtle drop shadow
3DRaised button effect with bottom edge and top highlight
GlassFrosted glass with translucent gloss overlay
MetallicChrome/metal sheen with bevel border and highlight band
NeonGlowing neon sign on dark background with glow effect

Each badge supports: background color, text color, gradient, border color, border radius (0-3), style, and priority.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


Templates (26 included)

Staff: Owner, Admin, Mod, Helper, Builder, Dev
Rank: VIP, VIP+, MVP, MVP+, Elite, Legend, Titan
Special: OG, Beta, Verified, Nitro, Booster, Veteran
Fun: Pro, Noob, GOAT, AFK, Streamer (LIVE), YouTuber (YT), Champion

Create from any template with one command:
Code:
/badge create mybadge owner
Or use the in-game GUI: /badge templates


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


Commands

CommandPermissionDescription
/badge listbasaltranks.listList all badges
/badge create <id> [template]basaltranks.adminCreate a badge
/badge edit <id>basaltranks.adminOpen GUI editor
/badge delete <id>basaltranks.adminDelete a badge
/badge assign <player> <badge>basaltranks.adminAssign to player
/badge remove <player>basaltranks.adminRemove from player
/badge templatesbasaltranks.adminBrowse template gallery (GUI)
/badge preview <id>basaltranks.adminPreview badge in chat
/badge render <id|all>basaltranks.adminExport badge to PNG
/badge web [on|off]basaltranks.adminToggle web editor
/badge reloadbasaltranks.adminReload configuration
/basaltranksbasaltranks.usePlugin version info


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


Web Editor

BasaltRanks includes a built-in web editor accessible from any browser. Create, edit, and manage badges with a modern dark UI — no mods or clients needed.

  • Badge CRUD with live pixel-art preview
  • Template browser with one-click creation
  • Player badge assignment panel
  • LuckPerms group-to-badge mapping
  • Resource pack regeneration
  • 15+ REST API endpoints with Bearer auth
  • Auto-starts by default — disable with /badge web off to save resources

Access at http://your-ip:8080/web after setting your server IP in config.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


Integrations

LuckPerms (optional)
Automatically assigns badges based on player's primary group. Real-time updates when ranks change via LuckPerms EventBus.
Code:
luckperms:
  group-badges:
    owner: "owner"
    admin: "admin"
    vip: "vip"
    default: ""

PlaceholderAPI (optional)
8 placeholders ready to use:
Code:
%basaltranks_badge%        - Badge ID
%basaltranks_text%         - Display text
%basaltranks_style%        - Visual style
%basaltranks_unicode%      - Unicode character
%basaltranks_has_badge%    - true/false
%basaltranks_priority%     - Priority number
%basaltranks_color%        - Background hex color
%basaltranks_text_color%   - Text hex color

Folia (automatic)
Full Folia compatibility via FoliaCompat scheduling layer. Detects Folia at runtime and uses the correct scheduler automatically. No configuration needed.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


Installation

  1. Download BasaltRanks-2.0.0.jar
  2. Drop it in your server's plugins/ folder
  3. Start or restart the server
  4. Set your public IP in config.yml under resourcepack.server-ip
  5. Change web-editor.password from change-me to something secure
  6. Run /badge templates and create your first badge!

Requirements
  • Server: Paper 1.20.x — 26.x (also works with Purpur, Folia)
  • Java: 21+
  • Port: 8080 open (resource pack + web editor)


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


Configuration

Everything is configurable — modules can be individually toggled, display modes (chat/nametag/tab) are independent, sounds are customizable, and all 42 messages support MiniMessage formatting.

Code:
# BasaltRanks Configuration
config-version: 1

modules:
  badge: true          # Core badge system
  resourcepack: true   # Pack generation + HTTP server
  display: true        # Chat, nametag, tab display
  luckperms: true      # LuckPerms auto-assignment
  editor: true         # GUI editor + commands
  web-editor: true     # Web-based editor panel

resourcepack:
  server-ip: "localhost"    # CHANGE to your public IP!
  port: 8080
  force-pack: true
  auto-regenerate: true

web-editor:
  auto-start: true          # Starts with the server
  password: "change-me"     # CHANGE before exposing!

display:
  chat: true
  nametag: true
  tab: true
  badge-suffix: " "

luckperms:
  group-badges:
    owner: "owner"
    admin: "admin"
    mod: "mod"
    helper: "helper"
    vip: "vip"
    default: ""

sounds:
  volume: 0.5
  pitch: 1.0
  open: BLOCK_NOTE_BLOCK_CHIME
  click: UI_BUTTON_CLICK
  success: ENTITY_PLAYER_LEVELUP
  error: ENTITY_VILLAGER_NO

update-check: true


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


Permissions

PermissionDefaultDescription
basaltranks.*OPAll permissions
basaltranks.adminOPAdmin commands (create, edit, delete, assign, remove, reload)
basaltranks.useEveryoneBasic plugin usage
basaltranks.listEveryoneList and view badge info
basaltranks.webOPWeb editor access


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


What's New in v2.0.0

  • Paper 26.x Support — Compatible from Paper 1.20 through 26.x
  • Folia Ready — Full FoliaCompat scheduling, works on Folia and Paper
  • Web Editor Auto-Start — Starts by default with security warnings for insecure passwords
  • Thread-Safe Web API — All Bukkit calls run on the main thread via sync bridge
  • Gson JSON Parsing — Replaced regex parser with Gson for robust handling
  • CORS Security — Restricted to trusted origins only
  • New Template — Added "Champion" metallic gold badge
  • Better Logging — SLF4J with full stack traces
  • Memory Leak Fix — Template GUI properly cleans up on close
  • OP Security Alerts — Admins get notified about insecure web passwords on join


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


FAQ

Q: Does this work with Geyser/Bedrock?
A: The resource pack works with Bedrock via Geyser, but depends on client font support.

Q: Can players have multiple badges?
A: One badge per player. The highest-priority badge is shown with LuckPerms auto-assignment.

Q: Does this conflict with other chat plugins?
A: No — BasaltRanks wraps the existing chat renderer at HIGH priority, works alongside EssentialsChat, DeluxeChat, etc.

Q: How many badges can I create?
A: No hard limit. Each badge uses one Unicode PUA character (6,400+ slots available).

Q: Does it work on Folia?
A: Yes! FoliaCompat detects Folia at runtime and uses the correct scheduler automatically.

Q: Does it work on Paper 26.x?
A: Yes! Compiled against Paper 1.21.4, forward-compatible with 26.x. Resource pack uses supported_formats for cross-version compatibility.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━



Enjoying BasaltRanks? Leave a review!
Report issues on the discussion tab.


Made with love by Turok_SS | Basalt Development

Latest reviews

This plugin is really great, but apparently it only does rankings for Java. How can I do it for Bedrock as well using GeyserMC?

I can create a Discord server for you, that way it's easier to fix bugs, give suggestions, and other things.
I gues its a good plugin but its not working and i get this error [21:20:15 ERROR]: [PluginRemapper] Encountered exception remapping plugins
java.util.concurrent.CompletionException: java.lang.RuntimeException: Failed to remap plugin jar 'plugins/BasaltRanks-2.2.0.jar'
at java.base/java.util.concurrent.CompletableFuture.wrapInCompletionException(CompletableFuture.java:323) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:359) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:364) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:670) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:503) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:1474) ~[?:?]
Caused by: java.lang.RuntimeException: Failed to remap plugin jar 'plugins/BasaltRanks-2.2.0.jar'
at io.papermc.paper.pluginremap.PluginRemapper.lambda$remap$7(PluginRemapper.java:362) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:667) ~[?:?]
... 4 more
Caused by: java.lang.RuntimeException: Failed to execute task dev/turok_ss/basaltranks/internal/bc
at net.neoforged.art.internal.AsyncHelper.invokeAll(AsyncHelper.java:56) ~[AutoRenamingTool-2.0.3.jar:?]
at net.neoforged.art.internal.AsyncHelper.consumeAll(AsyncHelper.java:36) ~[AutoRenamingTool-2.0.3.jar:?]
at net.neoforged.art.internal.RenamerImpl.run(RenamerImpl.java:161) ~[paper-1.21.11.jar:?]
at net.neoforged.art.internal.RenamerImpl.run(RenamerImpl.java:79) ~[paper-1.21.11.jar:?]
at io.papermc.paper.pluginremap.PluginRemapper.lambda$remap$7(PluginRemapper.java:359) ~[paper-1.21.11.jar:1.21.11-127-bd74bf6]
... 5 more
Caused by: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Duplicate key a (attempted merging values public static final dev/turok_ss/basaltranks/internal/bc/a Ldev/turok_ss/basaltranks/internal/bc$a; and private final dev/turok_ss/basaltranks/internal/bc/a Ljava/lang/String;)
at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:124) ~[?:?]
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:193) ~[?:?]
at net.neoforged.art.internal.AsyncHelper.invokeAll(AsyncHelper.java:52) ~[AutoRenamingTool-2.0.3.jar:?]
... 9 more
Caused by: java.lang.IllegalStateException: Duplicate key a (attempted merging values public static final dev/turok_ss/basaltranks/internal/bc/a Ldev/turok_ss/basaltranks/internal/bc$a; and private final dev/turok_ss/basaltranks/internal/bc/a Ljava/lang/String;)
at java.base/java.util.stream.Collectors.duplicateKeyException(Collectors.java:135) ~[?:?]
at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$0(Collectors.java:182) ~[?:?]
at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) ~[?:?]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:214) ~[?:?]
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1716) ~[?:?]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[?:?]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[?:?]
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[?:?]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265) ~[?:?]
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:723) ~[?:?]
at net.neoforged.art.internal.ClassProviderImpl$ClassInfo.<init>(ClassProviderImpl.java:122) ~[AutoRenamingTool-2.0.3.jar:?]
at net.neoforged.art.internal.ClassProviderBuilderImpl.lambda$addClass$1(ClassProviderBuilderImpl.java:64) ~[AutoRenamingTool-2.0.3.jar:?]
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1724) ~[?:?]
at net.neoforged.art.internal.ClassProviderBuilderImpl.addClass(ClassProviderBuilderImpl.java:64) ~[AutoRenamingTool-2.0.3.jar:?]
at net.neoforged.art.internal.RenamerImpl.lambda$run$2(RenamerImpl.java:162) ~[paper-1.21.11.jar:?]
at net.neoforged.art.internal.AsyncHelper.lambda$null$0(AsyncHelper.java:33) ~[AutoRenamingTool-2.0.3.jar:?]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) ~[?:?]
... 3 more
Turok_SS
Turok_SS
Hey! Thanks for the report — this has been fixed in v2.2.1, which is now available for download.
EULA: Free EULA
625 Views
97 Downloads
May 19, 2026 Published
Jun 1, 2026 Updated
5.00 star(s)
Average rating (2)
275.8 KB File size
Open source
  1. No
DRM-free
  1. Yes
Unobfuscated
  1. No
Type
  1. Chat
  1. GUI
Game mode
  1. Survival
Supported software
  1. Spigot
  1. Paper
  1. Purpur
Supported versions
  1. 1.21.11
  1. 1.21.8
  1. 1.21.5
  1. 1.21.4
  1. 1.21.2
  1. 1.21
  1. 1.20
Supported languages
  1. English
Creator
Owner
Struggling to cover the costs of your server? Set up your own webstore with Tebex in under 30 seconds.
Host a lag-free Minecraft or Hytale server in minutes.
Get 25% off your first order with our link.
Recommended for you
31 modules, Lands, Economy, Teams, Bounties, Auction House, Staff Tools, Custom Tools + more
Not yet rated
0 purchases
#1 BuiltByBit Plugin ~ Protects your server from crash packet exploits ~ Folia Support
5.00 star(s) 140 ratings
4,232 purchases
Create items, blocks, mobs, emojis, and more with automatic resourcepack generation!
5.00 star(s) 54 ratings
3,230 purchases
Protect your server from crash/dupe/packet exploits with the ultimate security fix plugin.
5.00 star(s) 45 ratings
3,133 purchases
High Performance | Customizable | Cross-Version | GeyserMC | Folia Support
4.50 star(s) 72 ratings
2,822 purchases
625 Views
97 Downloads
May 19, 2026 Published
Jun 1, 2026 Updated
5.00 star(s)
Average rating (2)
275.8 KB File size
Open source
  1. No
DRM-free
  1. Yes
Unobfuscated
  1. No
Type
  1. Chat
  1. GUI
Game mode
  1. Survival
Supported software
  1. Spigot
  1. Paper
  1. Purpur
Supported versions
  1. 1.21.11
  1. 1.21.8
  1. 1.21.5
  1. 1.21.4
  1. 1.21.2
  1. 1.21
  1. 1.20
Supported languages
  1. English
Creator
Owner
Struggling to cover the costs of your server? Set up your own webstore with Tebex in under 30 seconds.
Host a lag-free Minecraft or Hytale server in minutes.
Get 25% off your first order with our link.
Recommended for you
31 modules, Lands, Economy, Teams, Bounties, Auction House, Staff Tools, Custom Tools + more
Not yet rated
0 purchases
#1 BuiltByBit Plugin ~ Protects your server from crash packet exploits ~ Folia Support
5.00 star(s) 140 ratings
4,232 purchases
Create items, blocks, mobs, emojis, and more with automatic resourcepack generation!
5.00 star(s) 54 ratings
3,230 purchases
Protect your server from crash/dupe/packet exploits with the ultimate security fix plugin.
5.00 star(s) 45 ratings
3,133 purchases
High Performance | Customizable | Cross-Version | GeyserMC | Folia Support
4.50 star(s) 72 ratings
2,822 purchases
Top