RaindropCentral Logo
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=false
Free 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