RDR SetupRDR (RaindropReserve) is a storage plugin for Paper, Spigot, and Folia with player vaults, hotkey access, trusted sharing, and economy-aware storage taxes.
OverviewRDR is designed for secure player storage progression with role-based sharing, recurring tax flow, and multilingual support out of the box.
GUI-First StorageDaily storage access and management is centered around GUI flows.
Trusted SharingASSOCIATE and TRUSTED access levels control how shared storage is used.
Tax + Debt LoopSupports open taxes, recurring filled-storage taxes, and frozen debt flow.
Hotkey AccessPlayers can open assigned storages directly with /rr <hotkey>.
RequirementsBefore setup, confirm your server meets these requirements:
JavaJava 21 or higher
Minecraft API1.19+ target
Server SoftwareBukkit, Spigot, Paper, or Folia
Optional IntegrationsVault, JExEconomy, TheNewEconomy, Towny, RDT, HuskTowns
InstallationInstall exactly one RDR edition jar, then configure generated files.
1
Download RCoreInstall RCore first from the RaindropCentral products page.
2
Download One RDR Edition JarChoose your RDR edition and keep only one edition jar active.
3
Upload Plugin JarPlace one edition jar in your server plugins directory.
plugins/4
Start ServerBoot once to generate default RDR config and translation folders.
5
Configure RDREdit config, tax, blacklist, and requirement files under plugins/RDR.
plugins/RDR/ConfigurationExpand each file below. These are placeholders so you can paste your final production config blocks.
plugins/RDR/commands/prr.yml
commands:
prr:
name: 'prr'
description: 'RDR Commands'
aliases:
- rr
usage: 'rr [admin|storage|taxes|trade|scoreboard|<hotkey>]'
argumentUsages:
1$: 'lut["prefix"] & "&7/" & alias & "&c<admin | storage | taxes | trade | scoreboard | hotkey>"'
errorMessages:
malformedEnum$: |
lut["prefix"] & "&7The value &c" & value & " &7is not one of (" &
iter_cat(constant_names, (constant_name) => "&c" & constant_name, "&7, ", "&cNo values available") &
"&7)"
playerNotOnline$: 'lut["prefix"] & "&7The player &c" & value & " &7is &cnot online"'
playerUnknown$: 'lut["prefix"] & "&7The player &c" & value & " &7has &cnot played &7on this server before"'
internalError$: 'lut["prefix"] & "&4An internal error occurred"'
notAConsole$: 'lut["prefix"] & "&cYou can only execute this command in the console"'
notAPlayer$: 'lut["prefix"] & "&7This command can only be executed as a &cconsole"'
malformedDouble$: 'lut["prefix"] & "&7The value &c" & value & " &7is not a valid &cdouble"'
malformedFloat$: 'lut["prefix"] & "&7The value &c" & value & " &7is not a valid &cfloat"'
malformedLong$: 'lut["prefix"] & "&7The value &c" & value & " &7is not a valid &clong"'
malformedInteger$: 'lut["prefix"] & "&7The value &c" & value & " &7is not a valid &cinteger"'
permissions:
missingMessage$: 'lut["prefix"] & "You\sre lacking the permission: " & permission'
nodes:
command: 'raindroprdr.command'
commandAdmin: 'raindroprdr.command.admin'
commandInfo: 'raindroprdr.command.info'
commandScoreboard: 'raindroprdr.command.scoreboard'
commandStorage: 'raindroprdr.command.storage'
commandTrade: 'raindroprdr.command.trade'
lut:
prefix: '&8[&1Admin&8] &7'
plugins/RDR/config/config.yml
# Number of storages every new player receives when their profile is first created.
starting_storages: 1
# Global maximum number of storages a player may own.
# Starting storages are clamped to this value when a new profile is created.
max_storages: 10
# Highest numeric hotkey players may bind to a storage for `/rr <hotkey>` access.
max_hotkeys: 9
# Items that may never be deposited into any RDR storage.
global_blacklist:
- NETHER_STAR
# Log a startup warning listing required storage shop purchases that do not have configured requirements.
# Missing purchases are treated as having no requirements.
warn_missing_requirements: true
# Protection and storage-tax settings.
# Supported protection plugins: RDT, Towny, and HuskTowns.
protection:
# Storages that require the player to stand in their own claim from a supported protection plugin.
# Supports "none", "all", or one-based ranges such as "1-3,5".
restricted_storages: none
# Storages that should apply open taxes when accessed.
# Supports "none", "all", or one-based ranges such as "1-3,5".
taxed_storages: all
# Per-open storage taxes charged to the player.
# Set values to 0 to disable taxes by currency.
# Supports Vault and custom JExEconomy currencies.
open_storage_taxes:
vault: 0.0
raindrops: 0.0
# Recurring taxes charged for storages that currently contain one or more items.
# Taxes are applied per non-empty storage each interval using configured currencies.
filled_storage_taxes:
# Bukkit ticks between recurring tax runs.
interval_ticks: 1728000
# Maximum number of storages per owner that may be frozen for unpaid tax debt.
# Positive values cap frozen storages, 0 disallows creating new frozen storages, -1 is unlimited.
maximum_freeze: -1
# Maximum debt a single frozen storage may accrue for each currency.
# Positive values cap debt accrual, 0 or negative values allow unlimited debt.
maximum_debt:
vault: -1.0
raindrops: -1.0
# Tax amount charged per non-empty storage for each currency.
# Set values to 0 to disable recurring taxes by currency.
currencies:
vault: 0.0
raindrops: 0.0
# Cross-server DB-first trade settings.
trade:
# Master switch for all /rr trade features.
enabled: true
# Seconds before pending invites expire.
invite_timeout_seconds: 60
# Poll interval for invite/session/delivery inbox refresh (20 ticks = 1 second).
poll_interval_ticks: 20
# Max item offer slots per participant (capped to 12 by the plugin).
max_offer_slots: 9
# Cooldown in seconds between outbound trade invites by one player.
invite_cooldown_seconds: 5
# Proxy-enhanced trade UI controls.
proxy:
# Enables proxy-backed participant presence badges and online route hints.
presence_enabled: false
# Enables UI actions that route the player to the partner's current server.
join_partner_action_enabled: false
# Per-trade completion taxes charged to each participant before settlement finalizes.
taxation:
# Global switch for trade taxation.
enabled: false
# Per-currency tax definitions keyed by currency identifier.
currencies:
# Supported tax modes:
# FLAT: tax = flat_amount
# GROWTH: tax = flat_amount + (offered_currency_amount * growth_per_currency_amount) + (offered_item_count * growth_per_item)
vault:
mode: FLAT
flat_amount: 0.0
growth_per_currency_amount: 0.0
growth_per_item: 0.0
raindrops:
mode: FLAT
flat_amount: 0.0
growth_per_currency_amount: 0.0
growth_per_item: 0.0
# Shared proxy bridge controls.
proxy:
# Enables module-level proxy integrations.
enabled: false
# Optional authoritative route identifier for this Paper server.
server_route_id: ""
# RPlatform-powered requirements consumed for each one-based storage shop purchase tier.
# Only the tiers required to move from `starting_storages` to `max_storages` are needed.
# The bundled config defines the first 10 purchase tiers so higher storage caps can reuse the same pattern.
requirements:
1:
vault_purchase:
type: "CURRENCY"
currency: vault
amount: 1125
consumable: true
icon:
type: "DIAMOND"
coins_purchase:
type: "CURRENCY"
currency: coins
amount: 53
consumable: true
icon:
type: "EMERALD"
2:
vault_purchase:
type: "CURRENCY"
currency: vault
amount: 1265
consumable: true
icon:
type: "DIAMOND"
coins_purchase:
type: "CURRENCY"
currency: coins
amount: 57
consumable: true
icon:
type: "EMERALD"
3:
vault_purchase:
type: "CURRENCY"
currency: vault
amount: 1423
consumable: true
icon:
type: "DIAMOND"
coins_purchase:
type: "CURRENCY"
currency: coins
amount: 62
consumable: true
icon:
type: "EMERALD"
4:
vault_purchase:
type: "CURRENCY"
currency: vault
amount: 1601
consumable: true
icon:
type: "DIAMOND"
coins_purchase:
type: "CURRENCY"
currency: coins
amount: 66
consumable: true
icon:
type: "EMERALD"
5:
vault_purchase:
type: "CURRENCY"
currency: vault
amount: 1802
consumable: true
icon:
type: "DIAMOND"
coins_purchase:
type: "CURRENCY"
currency: coins
amount: 71
consumable: true
icon:
type: "EMERALD"
6:
vault_purchase:
type: "CURRENCY"
currency: vault
amount: 2027
consumable: true
icon:
type: "DIAMOND"
coins_purchase:
type: "CURRENCY"
currency: coins
amount: 77
consumable: true
icon:
type: "EMERALD"
7:
vault_purchase:
type: "CURRENCY"
currency: vault
amount: 2280
consumable: true
icon:
type: "DIAMOND"
coins_purchase:
type: "CURRENCY"
currency: coins
amount: 82
consumable: true
icon:
type: "EMERALD"
8:
vault_purchase:
type: "CURRENCY"
currency: vault
amount: 2565
consumable: true
icon:
type: "DIAMOND"
coins_purchase:
type: "CURRENCY"
currency: coins
amount: 89
consumable: true
icon:
type: "EMERALD"
9:
vault_purchase:
type: "CURRENCY"
currency: vault
amount: 2886
consumable: true
icon:
type: "DIAMOND"
coins_purchase:
type: "CURRENCY"
currency: coins
amount: 95
consumable: true
icon:
type: "EMERALD"
10:
vault_purchase:
type: "CURRENCY"
currency: vault
amount: 3247
consumable: true
icon:
type: "DIAMOND"
coins_purchase:
type: "CURRENCY"
currency: coins
amount: 103
consumable: true
icon:
type: "EMERALD"
plugins/RDR/database/hibernate.properties
# RDQ Database Configuration for JExHibernate
# This file configures com.raindropcentral.rdt.database connectivity and Hibernate settings
# ============================================
# Database Type Selection
# ============================================
# Supported types: H2, MYSQL, MARIADB, POSTGRESQL
# Default: H2 (embedded, no external com.raindropcentral.rdt.database required)
com.raindropcentral.rdt.database.type=H2
# ============================================
# H2 Database Configuration (Default - Embedded)
# ============================================
# H2 is used by default for easy setup without external com.raindropcentral.rdt.database
h2.url=jdbc:h2:file:./plugins/RDR/database/rdr;MODE=MySQL;AUTO_SERVER=TRUE
h2.driver=org.h2.Driver
h2.dialect=org.hibernate.dialect.H2Dialect
# ============================================
# MySQL Database Configuration
# ============================================
mysql.url=jdbc:mysql://localhost:3306/rdr?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=UTF-8
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.dialect=org.hibernate.dialect.MySQL8Dialect
mysql.username=rdq_user
mysql.password=change_me
# ============================================
# MariaDB Database Configuration
# ============================================
mariadb.url=jdbc:mariadb://localhost:3306/rdr?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
mariadb.driver=org.mariadb.jdbc.Driver
mariadb.dialect=org.hibernate.dialect.MariaDB106Dialect
mariadb.username=rdq_user
mariadb.password=change_me
# ============================================
# PostgreSQL Database Configuration
# ============================================
postgresql.url=jdbc:postgresql://localhost:5432/rdr
postgresql.driver=org.postgresql.Driver
postgresql.dialect=org.hibernate.dialect.PostgreSQLDialect
postgresql.username=rdr_user
postgresql.password=change_me
# ============================================
# Connection Pool Configuration (HikariCP)
# ============================================
# Maximum number of connections in the pool
hikari.maximumPoolSize=10
# Minimum number of idle connections
hikari.minimumIdle=2
# Maximum lifetime of a connection in milliseconds (30 minutes)
hikari.maxLifetime=1800000
# Connection timeout in milliseconds (30 seconds)
hikari.connectionTimeout=30000
# Idle timeout in milliseconds (10 minutes)
hikari.idleTimeout=600000
# Validation timeout in milliseconds (5 seconds)
hikari.validationTimeout=5000
# Leak detection threshold in milliseconds (0 = disabled)
hikari.leakDetectionThreshold=0
# Pool name for logging
hikari.poolName=RDR-HikariPool
# ============================================
# Hibernate Configuration
# ============================================
# Schema management: validate, update, create, create-drop, none
# Recommended: validate for production, update for development
hibernate.hbm2ddl.auto=update
# Show SQL statements in console (disable in production)
hibernate.show_sql=false
# Format SQL statements for readability
hibernate.format_sql=false
# Use SQL comments
hibernate.use_sql_comments=false
# Batch size for bulk operations
hibernate.jdbc.batch_size=25
# Order inserts for better batching
hibernate.order_inserts=true
# Order updates for better batching
hibernate.order_updates=true
# Enable batch versioned data
hibernate.jdbc.batch_versioned_data=true
# Second-level cache (disabled by default)
hibernate.cache.use_second_level_cache=false
# Query cache (disabled by default)
hibernate.cache.use_query_cache=false
# Statistics (disable in production)
hibernate.generate_statistics=false
# ============================================
# Advanced Settings
# ============================================
# Connection test query (for validation)
hikari.connectionTestQuery=SELECT 1
# Auto-commit mode
hikari.autoCommit=false
# Transaction isolation level
# Options: TRANSACTION_READ_UNCOMMITTED, TRANSACTION_READ_COMMITTED,
# TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE
hikari.transactionIsolation=TRANSACTION_READ_COMMITTED
# Register MBeans for JMX monitoring
hikari.registerMbeans=falseFree vs PremiumBoth editions share the same runtime and core systems. Limits differ:
Maximum Storages Per PlayerFree: min(config.max_storages, 3)Premium: Uses config.max_storages directly
First-Join Starting StoragesFree: Clamped to free effective maxPremium: Clamped to configured max
Storage Settings EditingFree: DisabledPremium: Enabled
Hotkey/Trusted Settings UIFree: Locked for ownersPremium: Fully available for owners
IntegrationsRDR supports economy, protection, and plugin ecosystem integrations from the admin integration views.
Vault
JExEconomy
TheNewEconomy
RDT
Towny
HuskTowns
PlaceholderAPI
LuckPerms
AuraSkills
JobsReborn
EcoJobs
PlaceholderAPIAvailable placeholders:
%rdr_storages_max%Maximum storages allowed.%rdr_storages_players%Number of storages unlocked by the player.%rdr_storages_items%Number of items currently stored across the player storages.%rdr_storages_tax%Comma-separated list of storage tax debt by currency.Next Steps
Review command routes on the RDR Commands page
Review permission nodes on the RDR Permissions page