Compatibility
Minecraft: Java Edition
26.3
26.2
26.1.x
1.21.4–1.21.11
Platforms
Creators
Details
Licensed MIT
Published 4 days ago
Updated 2 days ago

Holographic leaderboards placed right in your world. Players click buttons, switch leaderboards and scroll through places. No mods, no resource pack.
Paper 1.21.4+ Folia Java 21
How it works
- Stand where you want the board and run
/rvb create spawn loonycube. - The plugin places the board and pulls leaderboard data from ajLeaderboards.
- A player clicks a button and switches the leaderboard: balance, playtime, kills.
- A player looks at the board and scrolls the mouse wheel. Places scroll down to the 100th.
Each line, column and button is a text display entity, so you color, scale and animate every part of the board.
Features
- Holographic leaderboards right in the world, no mods or resource pack.
- Several leaderboards on one board, switched with a click.
- Period tabs: all time, year, month, week, day, hour.
- Mouse wheel scrolling, up to 100 places per board.
- A personal line with the viewing player's place and value.
- Leaderboards from ajLeaderboards or any plugin with PlaceholderAPI placeholders.
- 4 ready-made styles and your own style in a separate file: columns, colors, sizes, texts.
- 4 switch animations:
SLIDE_LEFT,SLIDE_RIGHT,ZOOM,CASCADE. - Buttons and lines grow when a player looks at them.
- In-game editing: rotate, resize from 0.25 to 4, shift, move, teleport.
- No limit on the number of boards and leaderboards.
- MiniMessage, Folia support.
Requirements
| Server | Java | Required plugins | Data source |
|---|---|---|---|
| Paper 1.21.4+ or Folia | 21 | PlaceholderAPI, packetevents | ajLeaderboards or any plugin with placeholders |
Commands and permissions
| Command | What it does |
|---|---|
/rvb help |
Shows the command list |
/rvb create <id> <style> |
Creates a board where you stand. Style is a file from the tops folder |
/rvb movehere <id> |
Moves a board to your position |
/rvb edit <id> |
Shows board information |
/rvb edit <id> rotate <0-360> |
Rotates the board to an angle |
/rvb edit <id> face |
Turns the board to face you |
/rvb edit <id> scale <0.25-4> |
Sets the board size |
/rvb edit <id> move <up|down|left|right|front|back> <blocks> |
Shifts the board |
/rvb edit <id> tp |
Teleports you to the board |
/rvb edit <id> type <style> |
Changes the board style |
/rvb edit <id> default-top <top> |
Sets the leaderboard that opens first |
/rvb remove <id> |
Deletes a board |
/rvb list |
Shows the board list |
/rvb reload |
Reloads the configs and the tops folder |
Alias: /rvisualboards. Every command requires rvisualboards.admin.
config.yml
update-interval-seconds: 10 # how often leaderboard data refreshes, in seconds
view-radius: 32.0 # distance from which a player sees a board, in blocks
snap-to-grid: true # true: the board sits at the block center and rotates in 90° steps
debug: false # detailed console messages for troubleshooting
metrics: true # anonymous bStats statistics
update-check: true # checks for a new plugin version
command: # applied after a server restart
name: "rvb" # main command name
aliases: # extra command names
- rvisualboards
clicks:
cooldown-millis: 300 # delay between button clicks, in milliseconds
sound:
key: "minecraft:ui.button.click" # click sound ID
volume: 0.6
pitch: 1.4
# Enlarges the element a player looks at.
hover:
buttons: true # enlarge buttons
rows: true # enlarge table lines
scale: 1.15 # button growth factor
row-scale: 1.1 # line growth factor
distance: 6.0 # working distance, in blocks
duration-ticks: 3 # growth duration, in ticks
# Mouse wheel scrolling through places.
scroll:
enabled: true
max-places: 100 # last place a player reaches
step: 1 # places per wheel step
distance: 8.0 # working distance, in blocks
# Animation on leaderboard or period change.
animation:
enabled: true
appear: true # animation when the board appears
types: # SLIDE_LEFT, SLIDE_RIGHT, ZOOM, CASCADE
- CASCADE
duration-ticks: 6 # duration, in ticks
stagger-ticks: 1 # delay between lines, in ticks
distance: 0.6 # offset, in blocks
advanced:
viewer-check-interval-ticks: 20 # how often the plugin checks who sees a board
hover-check-interval-ticks: 2 # how often the plugin checks where a player looks
# Data source placeholders. {board}: board name, {place}: place, {type}: period.
placeholders:
name: "%ajlb_lb_{board}_{place}_{type}_name%" # player name at the place
prefix: "%ajlb_lb_{board}_{place}_{type}_prefix%" # player prefix
value: "%ajlb_lb_{board}_{place}_{type}_value%" # value
position: "%ajlb_position_{board}_{type}%" # the viewing player's place
personal-value: "%ajlb_value_{board}_{type}%" # the viewing player's value
empty-name: "---" # what the source returns for an empty place
# Width of non-standard characters, in pixels. Keeps columns aligned.
char-widths:
"☠": 9
"⛃": 9
"⌚": 9
config-version: 1 # internal field, leave it as is
tops/<style>.yml
Each file in the tops folder is a separate board style. You pass the file name to /rvb create <id> <style>.
# Leaderboards on this board. Each one gets its own button.
tops:
balance: # leaderboard ID, any name
board: vault_eco_balance # ajLeaderboards board
label: "Balance" # button text
title: "<gradient:#f59e5b:#f5c05b>Top by coins" # board title
button-color: "#B3402709" # selected button color, #AARRGGBB
formats: # texts for this leaderboard, override the shared formats section
header-value: "<#a6a6a6>Balance"
row-place: "<#f9ce5c>{place}"
row-value: "<#ebb857>{value} <#f5a05b>⛃"
empty-place: "<#f9ce5c>{place}"
empty-value: "<#ebb857>--- <#f5a05b>⛃"
# A leaderboard from another plugin: add a placeholders section with its placeholders.
sellers:
board: cakeauction_sellers
label: "Sellers"
title: "<gradient:#3fd97a:#a5f08c>Top sellers"
button-color: "#B30C3618"
placeholders:
name: "%cakeauction_top_raw_name_{place}%"
prefix: "%cakeauction_top_prefix_{place}%"
value: "%cakeauction_top_value_{place}%"
position: "" # empty string: the source has no such placeholder
personal-value: ""
# Periods on the tabs: alltime, yearly, monthly, weekly, daily, hourly.
periods:
- alltime
period-names: # period names on the board
alltime: "All time"
yearly: "Year"
monthly: "Month"
weekly: "Week"
daily: "Day"
hourly: "Hour"
# Board texts, MiniMessage format.
formats:
subtitle: "<#8c8c8c>{period}" # subtitle. {period}: period name
header-place: "<#a6a6a6>#" # place column header
header-name: "<#a6a6a6>Player" # name column header
header-value: "<#a6a6a6>Value" # value column header
row-place: "<white>{place}" # place in a line
row-name: "{prefix}<#f0f0f0>{name}" # name in a line. {prefix}: player prefix
row-value: "<white>{value}" # value in a line
empty-place: "<white>{place}" # place in an empty line
empty-name: "<#f0f0f0>---" # name in an empty line
empty-value: "<white>---" # value in an empty line
personal-place: "<white>{position}" # the viewing player's place
personal-place-unranked: "<white>-" # place of a player outside the leaderboard
personal-name: "<#f0f0f0>{name}" # name in the personal line
personal-value: "<white>{value}" # value in the personal line
button: "<white>{label}" # leaderboard button
button-selected: "<white>{label}" # selected button
arrow-left: "<white>◀" # button scroll arrow, left
arrow-right: "<white>▶" # button scroll arrow, right
tab: "<gray>{period}" # period tab
tab-selected: "<white>{period}" # selected tab
table:
width: 5.5 # board width, in blocks
rows: 15 # places visible at once
text-scale: 1.0 # line text size
title-scale: 1.0 # title size
personal-row: false # true: show the viewing player's line
shadow: true # text shadow
full-bright: true # true: text stays bright at night and in shade
buttons: # leaderboard buttons
enabled: true
visible: 3 # buttons visible at once
arrows: true # arrows when there are more leaderboards than visible
height: 0.3 # button height, in blocks
text-scale: 1.0 # button text size
arrow-width: 0.2 # arrow width, in blocks
tabs: # period tabs
enabled: false
height: 0.24 # tab height, in blocks
text-scale: 0.8 # tab text size
# Columns. from and to: left and right edge in blocks from the board center.
# align: LEFT, CENTER, RIGHT.
columns:
place:
from: -2.75
to: -2.21
align: RIGHT
name:
from: -2.16
to: 1.51
align: CENTER
value:
from: 1.62
to: 2.75
align: RIGHT
# Background colors, #AARRGGBB. The first two digits set opacity.
colors:
title: "#70000000"
header: "#80000000"
column: "#5A000000"
personal-row: "#5A000000"
button: "#66000000"
button-selected: "#B3402709"
arrow: "#66000000"
tab: "#40000000"
tab-selected: "#99000000"
# Heights and gaps, in blocks.
spacing:
padding: 0.1 # board margins
title-height: 0.26 # title height
subtitle-height: 0.0 # subtitle height, 0 hides it
header-height: 0.31 # table header height
gap: 0.03 # gap between lines
cell-padding: 0.05 # text offset from the column edge
buttons-margin: 0.24 # gap between the table and the buttons
buttons-gap: 0.13 # gap between buttons
depth-step: 0.01 # step between background and text layers
Credits
The idea was partly inspired by ModernLeaderboards. Thanks to its author.


