Createrington Currency is a fully‑fledged economy mod for Minecraft built on the NeoForge mod loader. It introduces physical currency items, player bank accounts, an ATM block and a suite of commands that all tie into a remote backend API. Unlike simple economy add‑ons, balances and transactions live on your own server so you can connect multiple game servers to the same economy.
All planned features have been implemented and the mod is stable for production use. Tested for 2+ months in production with 1000+ players across multiple servers pre-CurseForge version. If you run into any issues, feel free to contact me.
- JavaScript (Most Stable)
- TypeScript (Unfinished)
- Python (Unfinished)
- Persistent accounts & transactions: All player balances, deposits, withdrawals and transfers are performed via HTTP requests to a remote server. Commands call endpoints such as
/currency/balance,/currency/pay,/currency/deposit,/currency/withdrawand/currency/top. The mod caches JWT tokens and refreshes them periodically to authenticate requests - Requires a backend API: Without an API server the mod will not function. See the configuration section for setting API URLs.
- Eight denominations:
$1,$5,$10,$20,$50,$100,$500,$1000. - Stackable and tradable: Bills behave like regular items. You can deposit them to your account or withdraw them using commands or the ATM.
- Drop behaviour: Certain hostile mobs can drop small bills when killed. Drop chances are configurable and scale with the
Capitalist Greedenchantment (see below). - Change-making recipes: bills craft into the next size up and split back down (5x$1 <-> $5, 2x$5 <-> $10, 2x$10 <-> $20, 5x$10 <-> $50, 2x$50 <-> $100, 5x$100 <-> $500, 2x$500 <-> $1000, plus 2x$20+$10 -> $50 and 5x$20 -> $100), so exact change never needs an ATM.
- Right-click: shows your balance on the action bar. Sneak + right-click: lists your last five transactions in chat. Both share the
commandCooldownMscooldown (never faster than once a second) and can be switched off withdisableBankCardUse. - Offhand: with a Create shopping list in the main hand, the card in the offhand lets the Stock Ticker integration withdraw the bills the list is missing.
- Server‑synced balances: Each player has a unique account identified by their UUID. Balances are fetched from the backend using
/currency/balance. Accounts persist across servers that point to the same API. - Secure transactions: The mod obtains a JWT token from the backend via the
/currency/loginendpoint and includes it in all authenticated requests.
| Command | Description |
|---|---|
/money |
Check your current balance |
/baltop |
See the richest players |
/pay |
Send money to another player |
/deposit |
Convert bills into balance |
/withdraw |
Withdraw bills from balance |
/daily |
Daily money reward |
All commands enforce a global cooldown, configurable via commandCooldownMs. If a player executes a command too quickly, they will see a cooldown message.
Any command can be turned off in the config, see Disabling commands.
| Command | Description |
|---|---|
/vote <type> [days] |
Start a 30-second server-wide vote. Types by default: day, night, sunrise, sunset, clear, rain, thunder. days (1-7) only applies to weather |
/vote yes / /vote no |
Cast your vote from chat while one is running |
A running vote is shown as a small strip at the top of everyone's screen instead of chat messages: what is being asked, the live yes/no counts, the countdown and the keys. Press Y to vote yes, N to vote no, or H to hide the strip (hiding counts as not voting). The keys only work while the strip is visible and no other screen is open, so they never interfere with a chest or the chat. The strip stays visible over your inventory and chat, shows late joiners the vote in progress, and switches to a PASSED / FAILED result for a few seconds when the vote ends. Nothing about a vote is posted to chat.
A vote passes when at least half of the eligible players (rounded up) have voted yes and there are more yes votes than no votes. A vote everybody ignores fails, and so does a tie: with 10 players online, 5 yes and 5 silent passes but 5 yes and 5 no does not. The number of yes votes needed when the vote starts is the most it will ever ask for: players joining or coming back from AFK mid-vote cannot raise it, while players leaving can still lower it. Spectators cannot start or cast a vote and are never counted; if the AFKStatus mod is installed AFK players are not counted either, unless they vote anyway. The vote ends the moment the result is certain instead of always waiting out the 30 seconds, and if you are the only eligible player it is applied straight away.
The share required is voteApprovalPercent (50 by default) and the AFK exclusion can be turned off with voteIgnoreAfk.
The votes themselves are a list in the config (vote.votes), one per line as <id> | <group> | <label> | <command>:
votes = [
"sunset | time | sunset | time set 12000",
"rain | weather | rain | weather rain {days:0.25}d"
]idis what players type after/voteand what tab completion offers. Letters, digits and_ . + -only;yesandnoare takengroupis the cooldown the vote belongs to: votes in the same group share one cooldownlabelis shown in the vote strip and completes the sentence "player wants ..."commandis run by the server console when the vote passes. A vote runs one command, so put several steps in a datapack function and call it withfunction
Write {days:<default>} in the command to let players add a number of days (1-7): /vote rain 3 runs weather rain 3d, and plain /vote rain uses the default (0.25d, a quarter of a day). Votes without it refuse a number.
Edits to the list apply without a restart. At startup and each time the file is saved, the server log lists the votes on offer and reports any malformed line, repeated id or command the server cannot run. A vote whose command cannot run is refused when a player tries to start it, and if a command fails after its vote passed the log gives the reason.
| Command | Description |
|---|---|
/createringtoncurrency admin-mode |
Operators only. Toggles admin mode for yourself; on / off set it explicitly. While it is on, right-clicking any depositor terminal opens its owner menu (set price, take bills) and chat tells you whose terminal you opened; while it is off you pay like any other customer. A /vote you start while it is on is a test vote: you are not counted as an automatic yes, the vote stays open for the full 30 seconds even if you are alone, and no cooldown applies, so the whole vote flow can be tried out on an empty server. It switches off again when you log out |
/createringtoncurrency audit |
Operators only. Counts every bill on the server and reports where it is — see Cash audit |
/createringtoncurrency audit takes a census of the physical cash on the server: how much exists, who is holding it, and where it is sitting.
| Command | Description |
|---|---|
/createringtoncurrency audit |
Full scan: online and offline players, every container and every entity in every dimension |
/createringtoncurrency audit players |
Players only. Instant, and does not touch the world files |
/createringtoncurrency audit goto <n> |
Teleport to location n from your last audit |
The chat summary shows the total, a per-source split, the change since the last audit, and the richest locations. Each location comes with a [go] button that teleports you there and a [copy] button that puts an /execute in <dimension> run tp @s <x> <y> <z> command on your clipboard. The number of rows is audit.auditChatSites; the full list — every location, with its bill breakdown and teleport command — is written to createringtoncurrency-audits/audit-<timestamp>.txt next to the server jar.
A full scan saves the world first so that what is on disk is current, then reads the region files of every dimension on background threads. It is read-only and never writes to world data. Chunks are only parsed in full when their raw bytes contain a bill id, so most of a large world is skipped cheaply; progress is reported in chat.
The scan walks container NBT generically rather than looking for known tags, so it finds bills in modded inventories — depositor terminals, Create vaults, anything built on an item handler — as well as vanilla ones, and it follows them into shulker boxes, bundles and container items. It also covers dropped items, chest minecarts, chest boats, pack animals and the crafting grid a player has open. Villager trade offers are skipped, since a bill listed in a trade does not exist yet.
Known gaps: bills riding inside a moving Create contraption or in transit on a belt; a pack animal someone is riding at the moment of the scan, which is saved to neither the entity files nor the rider's player data. Players moving bills around during a long scan can also be counted twice, so run it when the server is quiet. Every report states its own coverage rather than implying a total it cannot back up.
Because the mod's backend is the ledger and bills are ordinary items, comparing successive audits is the cheapest way to notice a duplication bug: a jump in the total with no withdrawals to explain it is the signal to look for. Only a full scan updates that baseline and only a full scan is compared against it, so using audit players never disturbs the comparison. Bills the backend has already debited but not yet handed to an offline player are reported separately, since they are a liability with no physical counterpart yet.
- Interactive ATM: Eight ATM variants can be crafted or given by operators. Right-clicking one opens a screen where players can deposit or withdraw money and browse their history without typing commands.
- Designed screen: The screen is an HTML/CSS page rendered by ApricityUI, which is why the mod requires it on the client. It scales to fill the window at any resolution, and home, deposit, withdraw and history are separate views with big buttons.
- Deposit: Deposit everything you are carrying with one button, or type an amount; the ATM takes exactly that amount from your bills and refuses instead of guessing when you cannot make exact change.
- Withdraw: Pick denominations and counts bill by bill, or enter a lump sum and let the ATM break it into the fewest bills. Your balance is checked first, so an unaffordable request is refused before anything moves.
- History: Page through your recent transactions without leaving the screen.
- Out of service: If the backend cannot be reached when the ATM is opened, the screen says so and offers a retry instead of failing silently. Your balance is refreshed after every deposit and withdrawal.
- Every drop is one line in the
mobDrops.dropsconfig list:<entity or #tag>=<denomination>:<chance>, for exampleminecraft:zombie=1:2.0,#minecraft:skeletons=5:2.0orminecraft:warden=100:25.0. The namespace defaults tominecraft. - Each matching line is rolled on its own, so one kill can drop several bills; what drops is handed out as the largest bills that fit the amount.
- By default zombies, spiders, creepers, skeletons, wither skeletons and blazes roll for a $1 bill, and skeletons, wither skeletons and blazes also roll for a $5.
- Drop chances increase with the Capitalist Greed enchantment (
capitalistGreedBonus, percentage points per level). - Daily mob drop earnings are capped (
mobDailyLimit) to maintain balance. The cap resets at a fixed hour in UTC (mobDailyResetHourUtc, midnight by default), the same moment the/dailyreward resets, and the limit message says how long is left.
- Levels I–III.
- Increases the chance of mobs dropping money when killed.
- Must be applied to weapons.
The mod adds its own advancement tab, Createrington Currency, that opens once a player picks up their first bill:
| Advancement | How to earn it |
|---|---|
| A Grand | Get hold of a $1000 bill |
| High Roller | Carry $10,000 in bills at once |
| Plastic | Get a Bank Card |
| Safe Keeping | Deposit bills into your bank account |
| Cash Out | Withdraw bills from your bank account |
| Paying Customer | Pay at someone else's Depositor Terminal |
| Open for Business | Set a price on your Depositor Terminal |
| First Sale | Get paid at your Depositor Terminal |
| Greed Is Good | Get Capitalist Greed on an item or book |
| A Hard Day's Work | Earn your daily limit from mob drops |
Deposits, withdrawals and payments count whether they go through the commands, the ATM or a terminal. The economy events behind these are exposed as the createringtoncurrency:economy criterion (with an event and an optional amount range), so datapacks can add their own thresholds.
With Create installed, the Depositor Terminal and every ATM explain themselves through Create's Ponder: hover the item and hold the Ponder key (W by default).
| Item | Scenes |
|---|---|
| Depositor Terminal | Taking payments (owner, price, cash and card), collecting the takings (storage, the red light, hoppers), and redstone signals |
| ATM (all colours) | Banking at an ATM: deposit, withdraw and history |
Both are also listed under Createrington Currency in the Ponder index.
On the client, the mod stops NeoForge from adding the Mojang logo to the early loading window while resources load, so a modpack's own startup screen is not drawn over. There is no option to turn this off.
- Minecraft version 1.21.1
- Requires NeoForge
21.1.249or newer - Requires CRNet
3.0.7or newer - the shared library that handles all backend HTTP calls and JWT authentication - Requires ApricityUI
1.2.5or newer on the client - the HTML/CSS UI engine that renders the ATM screen and the vote strip. The server does not need it, and clients without it can still join a server running this mod, they just cannot use the ATM or see votes - Optional: Create
6.0.0or newer enables the Stock Ticker shopping-list integration, the terminal trade overlay and the Ponder scenes; AFKStatus1.2.0or newer excludes AFK players from votes
- Mod requires a remote server with specific API endpoints:
POST /currency/login
GET /currency/balance
POST /currency/pay
POST /currency/deposit
POST /currency/withdraw
GET /currency/top
GET /currency/mob-limit
POST /currency/daily
⚠️ Without the backend API, this mod will not function.
Upon first launch, the mod generates a config file at:
/config/createringtoncurrency-common.toml
Inside, you can set:
- API base URL (
http://127.0.0.1:5000/by default) - Mob drop table (
mobDrops.drops) and the Capitalist Greed bonus per level - Daily mob earnings cap (
mobDrops.mobDailyLimit) and the UTC hour it resets at (mobDrops.mobDailyResetHourUtc) - Command cooldown
- Vote approval share (
vote.voteApprovalPercent), whether AFK players count (vote.voteIgnoreAfk) and the votes on offer (vote.votes, see Custom votes) - How many audit locations are listed in chat (
audit.auditChatSites) and how many threads a full audit reads region files with (audit.auditThreads, 0 = automatic) - Per-command
disable*Commandtoggles (see below)
Every chat command can be switched off individually. A disabled command is not registered at all, so it won't show up in tab completion:
| Config key | Disables |
|---|---|
disableMoneyCommand |
/money |
disablePayCommand |
/pay |
disableCashCommands |
/deposit, /withdraw |
disableBaltopCommand |
/baltop |
disableDailyCommand |
/daily |
disableVoteCommand |
/vote |
disableAdminModeCommand |
/createringtoncurrency admin-mode |
These toggles only affect the chat commands. The ATM block and the Create Stock Ticker integration have their own deposit/withdraw paths and keep working regardless, so for example disableCashCommands = true makes the ATM the only way to move bills in and out of an account.
disableBankCardUse turns off the Bank Card right-click balance and history in the same way; the Stock Ticker payment path is unaffected.
- Built with NeoForge for Minecraft 1.21.1.
- Developed using Java & Gradle.
- Token-based authentication used to secure all player transactions.
- Clone the repo.
- Open in an IDE (e.g., IntelliJ).
- Use JDK 21+.
- Run
gradlew buildto compile.
Made with ☕ by @matejhozlar
Let the money flow. 💸