Voxel Shop beta is live. Expect occasional bugs. Learn more  
Syncmoney icon

Syncmoney 1.3.2

Cross-server economy synchronization plugin for Minecraft

Syncmoney total Syncmoney License-Apache%202.0-green.svg
Platform-Paper%20%7C%20Folia%20%7C%20Canvas-orange.svg Java-21%20%2F%2025-blueviolet.svg Discord-Community-7289DA.svg?logo=discord&logoColor=white Donate-PayPal-blue
Vault / VaultUnlocked compatible cross-server economy synchronization with Redis Pub/Sub, multi-layer transaction guards, auditing, shadow backups, and embedded Web Admin.


Overview
Syncmoney is an enterprise-oriented Minecraft economy plugin focused on safe, consistent cross-server balance synchronization. It bridges Vault and VaultUnlocked economies across network nodes using Redis Pub/Sub and relational database persistence, backed by in-memory caching and comprehensive circuit breakers.
Syncmoney manages balances, currency operations, and its own economy commands and administration tiers. It is not a general-purpose permission or arbitrary command replicator.

Key Features


  1. Standard Economy Compatibility: Integrates seamlessly with Vault 1.7 and VaultUnlocked (Vault2 API).
  2. Flexible Economy Modes: Supports standalone SQLite ([ICODE]local[/ICODE]), Redis-only sync ([ICODE]local_redis[/ICODE]), Redis + SQL database persistence ([ICODE]sync[/ICODE]), and CMI-authoritative sync ([ICODE]cmi[/ICODE]).
  3. Distributed Synchronization: Redis Pub/Sub with atomic Lua scripts, monotonic versioning, and echo suppression to eliminate race conditions.
  4. In-Memory Performance: O(1) balance reads served directly from memory; persistent storage writes handled asynchronously off the tick thread.
  5. Multi-Layer Circuit Breaker: Real-time per-transaction limits, anomaly rate detection, and an independent per-player guard (L1–L4 states).
  6. Comprehensive Auditing & Analytics: High-throughput asynchronous audit log pipeline with search, stats, automated cleanup, and external export.
  7. Shadow Backups: Independent background account synchronization designed for cold-standby snapshots and state tracking.
  8. Embedded Web Admin Dashboard: Modern web interface (Vue 3 / Undertow) for health telemetry, configuration inspection, audit viewing, and economy monitoring.
  9. Region Scheduler Safe: Validated on Paper 1.20.4/26.2, Folia 26.2 BETA, and Canvas 26.2; scheduler boundaries are designed for region-threaded architectures.
  10. Extensible Ecosystem: Official PlaceholderAPI expansion and Bukkit transaction events ([ICODE]PostTransactionEvent[/ICODE]).



Platform & Compatibility


Server EnginePaper 1.20.4+ (Build API baseline), Folia, Canvas. Plain Spigot is not supported.
Java RuntimeJava 21 (Paper 1.20.4 – 1.20.6); Java 25 required for Paper 26.1+ environments.
Economy BridgeRequired: Vault (legacy 1.7) or VaultUnlocked (2.20.0+). Do not load both concurrently under the same name.
Message BrokerRedis 5.0+ (Required for [ICODE]sync[/ICODE], [ICODE]local_redis[/ICODE], and [ICODE]cmi[/ICODE] modes).
DatabaseMySQL 8.0+, MariaDB 10.5+, PostgreSQL 13+, or local SQLite.
Optional IntegrationsPlaceholderAPI (with [ICODE]SyncmoneyExpansion[/ICODE]), CMI (compatible licensed release for [ICODE]cmi[/ICODE] mode).

 


NOTE: Future server releases remain compatibility targets rather than unconditional guarantees. Always validate upgrades on a staging environment prior to updating production balances.

The 1.3.0 acceptance matrix covers Paper 1.20.4, Paper 26.2, Folia 26.2 BETA, Canvas 26.2, and a two-backend Paper 26.2 network behind the latest [ICODE]velocity-ctd[/ICODE] build. This is a tested compatibility baseline, not a promise that an unreleased server build will remain binary-compatible.

Installation & Setup
[LIST=1]Backup: Stop your server and take a full backup of existing plugin configs, economy databases, and Redis persistence.Install Plugin: Place [ICODE]Syncmoney-1.3.0.jar[/ICODE] and your preferred Vault provider in the server's [ICODE]plugins/[/ICODE] directory. Remove any older Syncmoney JAR versions.Initialize Configuration: Start the server once to generate default configuration files, then stop it.Configure Node: In [ICODE]plugins/Syncmoney/config.yml[/ICODE]:


  1. Assign a unique [ICODE]server-name[/ICODE] (e.g., [ICODE]survival-01[/ICODE], [ICODE]lobby-01[/ICODE]).
  2. Select your target [ICODE]economy.mode[/ICODE].
  3. Configure Redis and SQL database connection credentials if using synchronized modes.

Start & Verify: Start the server. Confirm in the console logs that Syncmoney and Vault have registered successfully. Verify basic transactions with [ICODE]/money[/ICODE] and [ICODE]/pay[/ICODE].Placeholders (Optional): If using PlaceholderAPI, copy [ICODE]SyncmoneyExpansion-1.3.0.jar[/ICODE] into [ICODE]plugins/PlaceholderAPI/expansions/[/ICODE] and run [ICODE]/papi reload[/ICODE].
[/LIST]

Economy Modes


[ICODE]local[/ICODE]Single-server SQLite file. No Redis or external database required.Standalone servers without cross-server requirements.
[ICODE]local_redis[/ICODE]Redis-backed network economy without SQL persistence.Networks relying on persistent Redis storage (AOF/RDB).
[ICODE]sync[/ICODE]Redis Pub/Sub + central SQL database (MySQL / MariaDB / PostgreSQL).Standard multi-server networks requiring robust relational persistence. SQLite is for LOCAL/Shadow storage, not this shared database connection.
[ICODE]cmi[/ICODE]CMI retains primary economy authority; mutations propagate via Redis.Networks using CMI as the authoritative economy engine.
[ICODE]auto[/ICODE]Automatically detects installed environment and suggests mode.For quick evaluations; explicit mode configuration is recommended for production.


Minimal Standalone Configuration ([ICODE]local[/ICODE])




server-name: "single-01"
economy:
mode: "local"
redis:
enabled: false
database:
enabled: false
db-enabled: false
pubsub-enabled: false

Shared Network Configuration ([ICODE]sync[/ICODE])
Set [ICODE]economy.mode: "sync"[/ICODE], enable both [ICODE]redis[/ICODE] and [ICODE]database[/ICODE], and ensure [ICODE]db-enabled: true[/ICODE] and [ICODE]pubsub-enabled: true[/ICODE]. Point all participating nodes to the same isolated Redis database and relational database schema while giving each server a distinct [ICODE]server-name[/ICODE].

Optional Modules & Lifecycle
All optional modules can be toggled in [ICODE]plugins/Syncmoney/config.yml[/ICODE].


Global Circuit Breaker[ICODE]circuit-breaker.enabled[/ICODE]Halts global economy operations upon abnormal inflation or anomalies. Status reports disabled when inactive.
Per-Player Protection[ICODE]circuit-breaker.player-protection.enabled[/ICODE]Independent rate-limiting, warnings, and automatic account freeze for suspicious player activities.
Transaction Guard[ICODE]transfer-guard.enabled[/ICODE]Protects players from balance inconsistency during cross-server transfers or teleports.
Audit Logging[ICODE]audit.enabled[/ICODE]Asynchronous transaction audit trail. Sub-features ([ICODE]cleanup[/ICODE], [ICODE]export[/ICODE], [ICODE]redis[/ICODE]) require this parent switch.
Shadow Sync[ICODE]shadow-sync.enabled[/ICODE]Background snapshot mirroring to secondary databases. Does not replace primary database backups.
Discord Webhooks[ICODE]discord-webhook.enabled[/ICODE]Real-time notifications for circuit breaker triggers, locks, and migration events.
Web Admin Panel[ICODE]web-admin.enabled[/ICODE]Embedded Undertow HTTP/WebSocket service for administrative dashboard.

 


IMPORTANT: Configuration Reload vs. Full Restart:
[ICODE]/syncmoney reload[/ICODE] updates localization messages and safe runtime parameters ([ICODE]display[/ICODE], [ICODE]pay[/ICODE], [ICODE]permissions[/ICODE], [ICODE]admin-permissions[/ICODE], [ICODE]debug[/ICODE]).
Changes to database/Redis connections, economy modes, module switches, schedulers, or Web Admin server endpoints require a full server restart. If modified, reload will notify you of the restart-only keys.


Commands & Permissions
Player Commands


[ICODE]/money[/ICODE]View personal balance[ICODE]syncmoney.money[/ICODE] (default: true)
[ICODE]/money [/ICODE]View another player's balance[ICODE]syncmoney.money.others[/ICODE] (default: op)
[ICODE]/pay [/ICODE]Send money to another player[ICODE]syncmoney.pay[/ICODE] (default: true)
[ICODE]/pay confirm[/ICODE]Confirm high-value transaction above thresholdNone (session verified)
[ICODE]/baltop [page][/ICODE]View global wealth leaderboard[ICODE]syncmoney.money[/ICODE] (default: true)
[ICODE]/baltop me[/ICODE]Check personal leaderboard position[ICODE]syncmoney.money[/ICODE] (default: true)


Administrative Commands


[ICODE]/syncmoney admin give [/ICODE]Add balance to player[ICODE]syncmoney.admin.give[/ICODE] / Admin tier
[ICODE]/syncmoney admin take [/ICODE]Deduct balance from player[ICODE]syncmoney.admin.take[/ICODE] / Admin tier
[ICODE]/syncmoney admin set [/ICODE]Set player balance directly[ICODE]syncmoney.admin.set[/ICODE] / Admin tier
[ICODE]/syncmoney admin reset [/ICODE]Reset player balance to zero[ICODE]syncmoney.admin.set[/ICODE] / Admin tier
[ICODE]/syncmoney admin view [/ICODE]Inspect detailed balance state[ICODE]syncmoney.admin[/ICODE]
[ICODE]/syncmoney breaker status[/ICODE]View circuit breaker health and state[ICODE]syncmoney.admin[/ICODE]
[ICODE]/syncmoney breaker reset[/ICODE]Reset tripped global breaker[ICODE]syncmoney.admin[/ICODE]
[ICODE]/syncmoney breaker unlock [/ICODE]Manually unlock a frozen player[ICODE]syncmoney.admin[/ICODE]
[ICODE]/syncmoney audit [page][/ICODE]View player audit history[ICODE]syncmoney.admin.audit[/ICODE]
[ICODE]/syncmoney audit search [/ICODE]Advanced audit record search[ICODE]syncmoney.admin.audit[/ICODE]
[ICODE]/syncmoney audit stats[/ICODE]View audit storage statistics[ICODE]syncmoney.admin.audit[/ICODE]
[ICODE]/syncmoney monitor [redis|cache|db][/ICODE]View real-time system and resource health[ICODE]syncmoney.admin.monitor[/ICODE]
[ICODE]/syncmoney econstats [supply|players][/ICODE]Inspect total supply and distribution[ICODE]syncmoney.admin.econstats[/ICODE]
[ICODE]/syncmoney debug [/ICODE]Multi-tier balance inspection across layers[ICODE]syncmoney.admin[/ICODE]
[ICODE]/syncmoney sync-balance [/ICODE]Force push memory balance to Redis and SQL[ICODE]syncmoney.admin[/ICODE]
[ICODE]/syncmoney shadow [status|now|logs][/ICODE]Monitor and trigger Shadow Sync tasks[ICODE]syncmoney.admin[/ICODE]
[ICODE]/syncmoney web [status|open|reload][/ICODE]Manage embedded web service[ICODE]syncmoney.admin[/ICODE]
[ICODE]/syncmoney migrate [/ICODE]Execute economy database migration[ICODE]syncmoney.admin[/ICODE]
[ICODE]/syncmoney test concurrent-pay [/ICODE]Run concurrent load tests on disposable setups[ICODE]syncmoney.admin.test[/ICODE]
[ICODE]/syncmoney reload [config|messages][/ICODE]Reload allowable configuration sections[ICODE]syncmoney.admin.reload[/ICODE]


Administrative Permission Tiers
Configurable in [ICODE]config.yml[/ICODE] under [ICODE]admin-permissions[/ICODE]:


Observe[ICODE]syncmoney.admin.observe[/ICODE]View only (0 give / 0 take)
Reward[ICODE]syncmoney.admin.reward[/ICODE]100,000 give / 0 take
General[ICODE]syncmoney.admin.general[/ICODE]1,000,000 give / 1,000,000 take
Full[ICODE]syncmoney.admin.full[/ICODE]Unlimited



PlaceholderAPI Identifiers
Syncmoney provides an optional expansion ([ICODE]SyncmoneyExpansion[/ICODE]) for PlaceholderAPI:


[ICODE]%syncmoney_balance%[/ICODE]Unformatted numeric balance
[ICODE]%syncmoney_balance_formatted%[/ICODE]Balance formatted with comma groupings ([ICODE]1,250.00[/ICODE])
[ICODE]%syncmoney_balance_abbreviated%[/ICODE]Abbreviated balance notation ([ICODE]1.5K[/ICODE], [ICODE]2.4M[/ICODE])
[ICODE]%syncmoney_balance_%[/ICODE]Balance of a specific target player
[ICODE]%syncmoney_rank%[/ICODE] or [ICODE]%syncmoney_my_rank%[/ICODE]Player's rank on the leaderboard
[ICODE]%syncmoney_top_%[/ICODE]Balance of the player at rank [ICODE]n[/ICODE]
[ICODE]%syncmoney_total_supply%[/ICODE]Total currency circulating in the economy
[ICODE]%syncmoney_total_players%[/ICODE]Total registered accounts tracked in leaderboard
[ICODE]%syncmoney_online_players%[/ICODE]Current online player count
[ICODE]%syncmoney_version%[/ICODE]Active Syncmoney plugin version

 


TIP: Cache misses for offline player lookups resolve asynchronously in the background. If data is still loading, placeholders return [ICODE]N/A[/ICODE] without freezing the main server thread.


Web Admin Setup & Security
The Web Admin module includes a lightweight Undertow HTTP server and pre-built frontend distribution.




web-admin:
enabled: true
server:
host: "127.0.0.1"
port: 8080
security:
api-key: "GENERATE_A_LONG_SECURE_RANDOM_KEY"
cors-allowed-origins: "https://admin.yournetwork.com"

Security Recommendations
[LIST=1]Reverse Proxy: Bind Web Admin to [ICODE]127.0.0.1[/ICODE] and route external traffic through Nginx or Caddy with HTTPS.API Key: Always replace the placeholder API key with a cryptographically secure token.SSE / WebSocket: When reverse proxying, ensure proxy buffering is disabled to support live SSE updates.Firewall: Restrict external access to the configured HTTP port.
[/LIST]

Developer Integration
Vault Provider Access
Syncmoney registers itself as a standard Vault provider:




RegisteredServiceProvider rsp = getServer().getServicesManager().getRegistration(Economy.class);
if (rsp != null) {
Economy economy = rsp.getProvider();
BigDecimal balance = BigDecimal.valueOf(economy.getBalance(player));
}

On servers running VaultUnlocked, Syncmoney also registers modern Vault2 services automatically.
Transaction Events
Subscribe to [ICODE]PostTransactionEvent[/ICODE] for transaction auditing:




@EventHandler
public void onPostTransaction(PostTransactionEvent event) {
if (!event.isSuccess()) {
return;
}
UUID playerUuid = event.getPlayerUuid();
BigDecimal amount = event.getAmount();
AsyncPreTransactionEvent.TransactionType type = event.getType();
// Handle post-transaction telemetry
}


Building from Source
Syncmoney uses Gradle with a Java 21 toolchain:




# Build the plugin JAR and PAPI expansion
./gradlew test shadowJar :syncmoney-papi-expansion:jar
# Build Web Admin frontend (requires Node.js and pnpm)
cd syncmoney-web
pnpm install
pnpm typecheck
pnpm test:unit --run
pnpm build

Compiled JAR files are produced in [ICODE]build/libs/[/ICODE] and [ICODE]syncmoney-papi-expansion/build/libs/[/ICODE].

Troubleshooting & Support


  1. Balances Not Synchronizing: Ensure all nodes have identical Redis server settings and databases. Verify that each node has a unique [ICODE]server-name[/ICODE] in [ICODE]config.yml[/ICODE] and [ICODE]pubsub-enabled: true[/ICODE].
  2. Account Locked: If a player account trips rate or anomaly limits, inspect [ICODE]/syncmoney audit [/ICODE] to diagnose the trigger, then unlock with [ICODE]/syncmoney breaker unlock [/ICODE].
  3. Configuration Reload Incomplete: Check the console output when executing [ICODE]/syncmoney reload[/ICODE]. Settings requiring service reconstruction require a full server restart.
  4. Reporting Issues: Include plugin version ([ICODE]/syncmoney version[/ICODE]), server software build ([ICODE]/version[/ICODE]), Java version, and sanitized logs/configs (redact passwords, API keys, and webhook URLs).
  5. GitHub Issues: Issues Tracker
  6. Community Discord: Join Discord



License
This project is licensed under the Apache License 2.0.

Owned
Ready to download
This resource is already attached to your account. You can download the latest file any time.

sync

economy

minecraft