MeowEco
MeowEco is a High-Efficiency, Lightweight, and Highly Compatible economy plugin designed for modern Minecraft servers.
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
MeowEco
MeowEco Documentation
Version: `26.7.4`
MeowEco is a Paper economy plugin with multi-currency support, Vault integration, PlaceholderAPI support, exchange rates, frozen funds, and scheduled rich tax.
Platform
- Plugin version: `26.7.4` - Current build target API: `io.papermc.paper:paper-api:26.1.1.build.14-alpha` - `meoweco-paper` is compiled with a JDK 25 toolchain - The plugin artifact still targets Java 17 bytecode for compatibility with older supported Paper servers - If you run `Paper 26.1.x / 26.1.1`, the server itself still needs Java 25 because that requirement comes from upstream Paper
Implemented Features
- Multiple currencies loaded from `config.yml` - Per-currency display name, singular or plural name, initial balance, decimal precision, and transfer tax - Configurable default currency used by Vault and command fallbacks - Currency exchange with direct, inverse, and default-currency-derived rates - Player balance lookup, payments, and leaderboard - Admin balance management: give, take, set - Frozen funds operations: `freeze`, `unfreeze`, `deductfrozen` - Leaderboard visibility control: `hide`, `unhide` - Leaderboard and placeholder cache refresh: `refresh` - Scheduled rich tax with system sink or player collector - Vault economy provider for the default currency - PlaceholderAPI expansion with cached balance, top, and server-total placeholders - Update checker against Modrinth - Automatic account creation for every configured currency on player join - Command override listener for legacy labels such as `/bal`, `/money`, `/pay`, `/baltop`, `/moneytop`, and `/ecotop`
Configuration
Main file: `plugins/MeowEco/config.yml`
Core Keys
```yaml messages: language: "zh_CN"
storage: type: sqlite mysql: host: localhost port: 3306 database: meoweco username: root password: password use-ssl: false
update-checker: enabled: true interval: 24 slug: "meoweco"
default-currency: "coins"
exchange-rates: enabled: true coins: points: 0.1 gems: 0.01
rich-tax: enabled: false threshold: 100000.0 rate: 0.05 start-time: "03:00" interval: "24h" destination: type: "system" player: "Admin"
currencies: coins: display-name: "&eCoins" singular: "Coin" plural: "Coins" initial-balance: 100.0 decimal-places: 2 transfer-tax: 0.0 ```
Rich Tax Behavior
- `threshold`: only the balance above this value is taxed - `rate`: clamped to `0.0` through `1.0` - `start-time`: server local time in `HH:mm` - `interval`: supports raw minutes or suffixed values like `30m`, `6h`, `1d` - `destination.type`: - `system`: taxed funds are removed - `player`: taxed funds are transferred to the configured player account
Commands
Registered Root Commands
- `/meoweco` - `/money` - `/pay` - `/baltop` - `/eco`
Aliases:
- `/meoweco`: `meco`, `meow` - `/money`: `balance`, `bal` - `/eco`: `economy`
Player Commands
| Command | Description | | :--- | :--- | | `/meco` | Shows help | | `/meco bal [player] [currency]` | Check balance | | `/meco money [player] [currency]` | Same as `bal` | | `/meco pay <player> <amount> [currency]` | Send money | | `/meco top [currency]` | Show leaderboard | | `/meco baltop [currency]` | Same as `top` | | `/meco exchange <amount> <from> <to>` | Exchange currencies when enabled |
Shortcut or legacy-compatible commands:
- `/bal`, `/balance`, `/money` - `/pay` - `/baltop` - `/moneytop` - `/ecotop`
Admin Commands
| Command | Description | | :--- | :--- | | `/meco give <player> <amount> [currency]` | Add funds | | `/meco take <player> <amount> [currency]` | Remove funds | | `/meco set <player> <amount> [currency]` | Set total balance | | `/meco setrate <from> <to> <rate>` | Update exchange rate and save to config | | `/meco hide <player>` | Hide player from leaderboard | | `/meco unhide <player>` | Show player on leaderboard again | | `/meco refresh` | Clear caches and fix unknown stored names | | `/meco reload` | Reload config and messages | | `/meco checkupdate` | Run update check immediately | | `/meco debug` | Toggle debug mode | | `/meco debug currencies` | Print loaded currencies |
Additional admin economy routes implemented in `EcoCommand`:
| Command | Description | | :--- | :--- | | `/eco bal [player] [currency]` | Balance shortcut | | `/eco top [currency]` | Leaderboard shortcut | | `/eco freeze <player> <amount> [currency]` | Move available funds into frozen balance | | `/eco unfreeze <player> <amount> [currency]` | Release frozen funds | | `/eco deductfrozen <player> <amount> [currency]` | Deduct from frozen balance and total balance |
TrMenu Compatibility
MeowEco can be used inside TrMenu menus for VIP shops, point purchases, exchange menus, and similar GUI flows.
There are two recommended styles:
1. Short action style
If your TrMenu environment already provides MeowEco short conditions or actions, you can write:
```yaml actions: left: condition: 'meco points >= 99' actions: - 'meco-take: points 99' - 'console: lp user %player_name% permission set vip.level1 true' - 'tell: &aPurchase successful' ```
To give currency:
```yaml actions: left: actions: - 'meco-give: points 99' - 'tell: &aGranted 99 points' ```
Meaning:
- `condition: 'meco points >= 99'`: checks whether the player has at least `99` of the `points` currency - `meco-take: points 99`: removes `99` of `points` from the player's account - `meco-give: points 99`: adds `99` of `points` to the player's account
2. Universal command style
If you do not use those short actions, or you want the most portable setup, let TrMenu execute MeowEco commands directly:
```yaml actions: left: condition: 'js: Number("%meoweco_balance_points%") >= 99' actions: - 'console: meco take %player_name% 99 points' - 'tell: &aPurchase successful' deny: - 'tell: &cNot enough points' ```
To give currency:
```yaml actions: left: actions: - 'console: meco give %player_name% 99 points' - 'tell: &aGranted 99 points' ```
Notes:
- `console:` is recommended for `meco give` and `meco take`, so player permissions do not block the action - Conditions can use PlaceholderAPI values such as `%meoweco_balance_points%` - `points` is only an example currency id; replace it with `coins`, `gems`, or any other currency id from your config - For frozen-balance operations, you can also call `console: eco freeze ...`, `console: eco unfreeze ...`, and `console: eco deductfrozen ...`
Permissions
Declared in `plugin.yml`:
- `meoweco.admin` - `meoweco.balance` - `meoweco.balance.other` - `meoweco.pay` - `meoweco.take` - `meoweco.reload` - `meoweco.top` - `meoweco.eco.give` - `meoweco.eco.take` - `meoweco.eco.set` - `meoweco.eco.freeze` - `meoweco.eco.unfreeze` - `meoweco.eco.deductfrozen` - `meoweco.debug`
Notes:
- `give`, `take`, `set`, `freeze`, `unfreeze`, and `deductfrozen` can now be granted through their dedicated permission nodes - `setrate`, `refresh`, `hide`, and `unhide` should still stay on the stricter `meoweco.admin` path
PlaceholderAPI
Identifier: `meoweco`
Currency Metadata
- `%meoweco_currency_singular%` - `%meoweco_currency_plural%` - `%meoweco_currency_display%` - `%meoweco_currency_id%` - `%meoweco_currency_singular_<currency>%` - `%meoweco_currency_plural_<currency>%` - `%meoweco_currency_display_<currency>%` - `%meoweco_currency_id_<currency>%`
Balance Placeholders
Supported modes: `balance`, `frozen`, `available`
Supported formats:
- default: formatted numeric balance with separators - `raw` - `formatted` - `fixed` - `short`
Examples:
- `%meoweco_balance%` - `%meoweco_balance_points%` - `%meoweco_balance_short_gems%` - `%meoweco_frozen%` - `%meoweco_frozen_fixed_coins%` - `%meoweco_available_formatted_points%`
Server Total Placeholders
- `%meoweco_server_total_<currency>%` - `%meoweco_server_total_raw_<currency>%` - `%meoweco_server_total_formatted_<currency>%` - `%meoweco_server_total_fixed_<currency>%` - `%meoweco_server_total_short_<currency>%`
Top Placeholders
- `%meoweco_top_<rank>name<currency>%` - `%meoweco_top_<rank>raw<currency>%` - `%meoweco_top_<rank>formatted<currency>%` - `%meoweco_top_<rank>fixed<currency>%` - `%meoweco_top_<rank>short<currency>%` - `%meoweco_top_<rank>balance<currency>%`
Developer API
Service lookup:
```java MeowEcoAPI api = MeowEcoAPI.get(); ```
Main methods currently exposed:
```java Collection<Currency> getRegisteredCurrencies(); Currency getCurrency(String id); double getBalance(UUID uuid, String currencyId); boolean deposit(UUID uuid, String currencyId, double amount); boolean withdraw(UUID uuid, String currencyId, double amount); double getFrozenBalance(UUID uuid, String currencyId); double getAvailableBalance(UUID uuid, String currencyId); boolean freeze(UUID uuid, String currencyId, double amount); boolean unfreeze(UUID uuid, String currencyId, double amount); boolean deductFrozen(UUID uuid, String currencyId, double amount); ```
Operational Notes
- Leaderboard cache lifetime: 5 minutes - Placeholder balance cache lifetime: 1 second - Placeholder top and server-total cache lifetime: 30 seconds - Most database operations are dispatched asynchronously - Hidden accounts are excluded from leaderboard output at the database layer