4.0.0
Compatibility
Changes
--Now available in English--
New Commands
- /baltop [page] Leaderboard showing the richest players, paginated (10 per page). Aliases: /top, /reichtum
- /sell [hand|all] Sell items from your hand or entire inventory for money. Opens a GUI when used without arguments. Requires simpleeconomy.sell permission
- /settings Opens a GUI to toggle language (DE/EN) and scoreboard on/off. Alias: /einstellungen
- /eco reload New subcommand to reload config and language files at runtime
New Features
SQLite database (economy.db) — All balances, player settings, and transaction history are now persisted in a real database instead of a flat YAML file. Includes WAL mode, batched writes, and a YAML backup as fallback Vault integration (VaultHook) — Full Economy API implementation; all other plugins using Vault can now interact with this economy PlaceholderAPI integration (PlaceholderHook) — Exposes %economy_balance%, %economy_balance_raw%, and %economy_rank% placeholders Fishing rewards (FishingListener) — Players earn money when catching fish or treasure items Sell GUI (SellGui) — Inventory GUI showing all sellable items with prices; supports selling individual stacks or everything at once Settings GUI (SettingsGui) — Per-player toggle for language (DE/EN) and scoreboard visibility Per-player language support (Lang) — Full DE/EN localisation loaded from lang/de.yml and lang/en.yml; each player switches language independently via /settings Payment confirmation (PendingPay) — Transfers above a configurable threshold require /pay confirm or /pay cancel within 30 seconds Chat input system (ChatInput + ChatInputListener) — Used by the Admin GUI "custom amount" button to read a value typed in chat Piston-aware wood tracking — WoodListener now handles BlockPistonExtendEvent and BlockPistonRetractEvent so piston-moved logs do not grant rewards
Changes to Existing Features
EconomyManager — Reward tables (blocks, mobs, harvests, wood) are now fully config-driven and reloadable via reloadRewards(); previously hardcoded. Added fishingRewards and sellPrices tables. PVP transfer rate, PVP cooldown, starting balance, max balance, and scoreboard settings are now read from config.yml instead of constants EconomyPlugin — Added Database, Lang, VaultHook, and AdminGuiManager as managed components; added reload() method; added an async auto-save timer (every 5 min) alongside the existing scoreboard timer ScoreboardManager — Added removeScoreboard(). Lines are now rendered via the Team+prefix approach for full-length text support. Scoreboard can be hidden per player WoodTracker — Wood block positions are now persisted in the database instead of an in-memory HashSet; data survives restarts AdminGui renamed to AdminGuiManager — Refactored into an instance-based Listener. Open inventories are now tracked by UUID to prevent stale state. Added "custom amount via chat" button KillListener — PVP cooldown is now tracked per killer+victim pair stored in a Map<UUID, Map<UUID, Long>>; previously not implemented EcoAdminCommand — Added reload subcommand; notify() now accepts varargs for localised messages; fully integrated with the Lang system PayCommand — Extracted executeTransfer() as a separate method; added confirmation flow via PendingPay; payment now plays sounds and sends action bar messages
Removed
AdminGuiListener as a standalone class — logic merged into AdminGuiManager Hardcoded reward maps in EconomyManager (initBlockRewards, initHarvestRewards, etc.) — replaced by config-driven loading PVP_TRANSFER_RATE public constant — moved to config.yml Flat-file YAML data storage (dataFile / dataConfig / saveAll() in EconomyManager) — replaced entirely by Database
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:4rJfjYkB:xn6l4BFc"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:4rJfjYkB:xn6l4BFc"
}

