MeowEco

MeowEco is a High-Efficiency, Lightweight, and Highly Compatible economy plugin designed for modern Minecraft servers.

202

MeowEco

issues

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

ADS