Troubleshooting

Common problems and how to fix them.

Plugin does not load

Check the server console for errors on startup. TheBrewingMarket logs its initialization under the prefix [TheBrewingMarket]. Common causes:

Error in consoleCauseFix
Could not load plugin: Vault Vault is missing or loaded after TheBrewingMarket Install Vault and make sure it is in plugins/ before starting
[TheBrewingMarket] Missing TBP/BreweryX. Disabling. Neither brewing plugin is installed (at least one is required) Install TheBrewingProject or BreweryX — not both (see Installation)
Unsupported Java version or class file errors Java version below 25 Upgrade your server JDK to Java 25
Unknown dependency or plugin ignored Running on Spigot or CraftBukkit Switch to Paper 1.21.9+ — Spigot is not supported

No economy provider found

Vault is installed but the sell command does nothing or returns an economy error. This means Vault cannot find an economy plugin to connect to.

Fix: Install an economy plugin that hooks into Vault, such as EssentialsX or CMI. Vault itself does not provide economy — it is a bridge.

Brews are not recognized / wrong price

A player tries to sell a brew but gets an error, or it sells at the default fallback price instead of the expected one.

  • Open config.yml and check the recipe ID under market.prices. It must match the recipe identifier in your brewing plugin exactly (lowercase, underscores, no spaces).
  • The item must be a valid brew crafted by TheBrewingProject or BreweryX. Regular potions or other items cannot be sold.
  • If the recipe ID is correct but the price is still wrong, the brew may have a very low quality score — brews that failed fermentation or distillation often have quality near 0.01, which multiplies the base price down significantly.
  • If both TheBrewingProject and BreweryX are installed, TheBrewingMarket uses TheBrewingProject exclusively. Brews from BreweryX will not be recognized in that case.

GUI does not open

Running /thebrewingmarket does nothing or returns "no permission".

  • The player needs the thebrewingmarket.use permission (granted to everyone by default). Check your permissions plugin for an accidental negation (-thebrewingmarket.use).
  • Confirm the plugin loaded successfully — run /plugins and look for TheBrewingMarket in green.

Config changes not applying

You edited config.yml but the server still uses the old values.

Fix: Run /thebrewingmarket reload (requires thebrewingmarket.admin). A full server restart also works.

Database connection error (MySQL / MariaDB)

The plugin loads but logs a database error and sell history does not record.

  • Double-check host, port, user, password, and database in database.yml.
  • Make sure the database server is reachable from the Minecraft server (firewall, bind address).
  • The database user must have CREATE, INSERT, and SELECT privileges on the target database.
  • If you recently switched from SQLite to MySQL, remember that history data is not migrated automatically.

Placeholders return nothing or stay as %tbm_...%

You added a TheBrewingMarket placeholder to a hologram, scoreboard or chat plugin, but it either shows an empty string or the raw %tbm_...% text.

  • Make sure PlaceholderAPI 2.11+ is installed and listed in /plugins. Without it, TheBrewingMarket silently skips expansion registration.
  • On startup the console should print PlaceholderAPI expansions registered: tbm, thebrewingmarket. If it does not, PAPI was not present when TheBrewingMarket loaded — install PAPI and restart.
  • Run /papi info tbm to confirm the expansion is live. If the command replies "unknown expansion", the registration failed.
  • Placeholders are case-sensitive. Use %tbm_daily_earned%, not %TBM_Daily_Earned%.
  • Per-recipe placeholders like %tbm_price_wine% require the recipe ID to match your config.yml exactly. Unknown recipes return an empty string.

Lifetime or global placeholders show 0

%tbm_lifetime_earned% or %tbm_global_total_today% return 0 even though sales exist in the database.

  • Lifetime stats are cached per player and seeded on join. For players who were already online when the plugin was first installed or reloaded, the cache fills on their next login.
  • Global analytics refresh asynchronously once every 60 seconds. A fresh sale will not show up in %tbm_global_*% placeholders until the next refresh tick.
  • Confirm that sell_history is actually being written — if the history table is empty, all lifetime/global placeholders will legitimately read as 0. See the database section above.

Still stuck?

Open an issue on the GitHub repository and include the relevant lines from your server console and your database.yml (remove passwords before posting).