CoreJobs | Jobs, Prestige & Farmpoints v1.5.0
Six configurable jobs with prestige, level rewards, boosts, drop tables, and a points shop.
A scoreboard line that names every boost a player has, and raw ids on the action bar so other plugins' placeholders can be built from what was just broken.
📊 Where the Boost Comes From%corejobs_external_xp_source% means other plugins only, so with just a CoreJobs boost running it reads as none. That is correct, but it is not what most people want on a scoreboard.
There is a new one that names everything:
%corejobs_total_xp_source%
A CoreJobs boost on its own reads CoreJobs. Add a gear bonus from another plugin and it reads CoreJobs, zCustomGear. Works for money and farmpoints too, and takes a job in the middle like the others: %corejobs_total_xp_miner_source%.
Rename what CoreJobs calls itself in your language file, so it matches whatever your players see in the shop:
placeholder:
self-source: "&bServer Boost"
The line then reads Server Boost, zCustomGear. Nothing you already wrote changed, %corejobs_external_xp_source% still means exactly what it did.
🧱 Raw Ids on the Action Bar{block} still reads as a proper name, oak log. Two new placeholders give you the raw ids instead: {block_id} is oak_log, and {job_id} is lumberjack.
xp-actionbar: "{job} &7+{gained} xp &f{block} &8| &f{block_id} &8| &f{job_id}"
Both are filled in before PlaceholderAPI runs, which is the point of them. You can build another plugin's placeholder out of whatever was just broken:
xp-actionbar: "{job} &f{block} &8| &b%someplugin_count_{block_id}%"
Use {block_id} for that, never {block}. A proper name has a space in it, and a placeholder with a space in it does not resolve.
That only builds the string. Whether it answers is up to the other plugin. A counter that groups materials, where cobblestone counts toward something called stone, will not answer to cobblestone unless that plugin resolves the material for you.
🎣 Fishing and Enchanting Name What They Got
Those two used to say fish on every catch and enchant on every enchant, whatever it actually was. Now a cod reads cod, a treasure catch reads what it is, and enchanting a diamond sword reads diamond sword.
This is the one thing that changes under you. If a line of yours relied on it always reading the word "fish", that line will now read the catch instead.
📦 Install
Stop the server, replace the old jar in plugins/, and start it again. Your language file picks up the two new keys on its own, with nothing to regenerate.
Read the documentation | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Boosts for money and farmpoints, a queue so nothing is wasted, a shop you can edit in game, and an API for other plugins.
📝 Upgrade Notes
An xp boost no longer raises money as well. Money is its own kind of boost now. If you want the old behaviour, set boosts.xp-also-money: true in config.yml.
Your language file keeps your old boost wording, which says "XP boost" for every kind. To pick up the new wording with {type} in it, delete the whole boost: block from your language file and save. It comes back correctly on the next start.
Nothing else needs doing. Your configs and your database are kept, and new keys drop in on their own.
⚡ Three Kinds of Boost
Boosts come in xp, money and farmpoints, and one of each can run at the same time. The shop sells one of each, and the command takes a kind:
/corejobs boost <player|global> [xp|money|farmpoints] <job|all> <multiplier> <seconds>
Leave the kind out and you get an xp boost, so anything you already had set up keeps working.
Each kind has its own placeholders, so you can put an active boost on your scoreboard:
%corejobs_boost_money_active%
%corejobs_boost_money_amount%
%corejobs_boost_money_time%
Swap money for xp or farmpoints.
⏳ Boosts Wait Their Turn
Two boosts of the same kind no longer run side by side and waste each other. The stronger one counts down while the weaker one freezes with its full time saved, and starts the moment the stronger one ends.
- A waiting boost has its own item in the menu, with a clock icon, the time it has saved, and a line saying when it starts. Running boosts are listed first
- Buying a boost that has to wait tells you so, instead of claiming it is active
- Buying the same boost twice adds the time onto the one you already have, rather than starting a second entry
- Server downtime costs nothing. Stop the server for an hour and a boost comes back with the same time left. A clean stop is exact, a crash costs at most 30 seconds
All of it is configurable: boosts.queue-lower, boosts.same-boost, and boosts.stacking for whether overlapping boosts take the highest, add, or multiply.
🎁 Boosts as Items
A bought boost can arrive as an item instead of starting straight away, so players can save it, trade it, or hold it for a busy evening. Right click it in the air and the boost starts.
Turn it on globally with boosts.as-item: true, or per shop entry with as-item: true on that entry's boost block. Staff can hand them out directly:
/corejobs boost item <player> <job|all> <multiplier> <seconds> [amount]
Right clicking a chest or a door with a boost item in hand leaves the item alone and opens the block, so nothing is spent by accident. Crouch first if you want to use one while facing a block.
🛒 Build Your Shop In Game
No more editing shop.yml by hand. Create a boost entry, sell the item in your hand, or take an entry out, all from in game, and the shop updates immediately.
/corejobs shop boost <id> <slot> <price> <xp|money|farmpoints> <job|all> <multiplier> <seconds> [item|now]
/corejobs shop add <id> <slot> <price>
/corejobs shop remove <id>
/corejobs shop list
- A bundled entry you remove stays removed, rather than coming back on the next start
- The console tells you what is wrong with an entry: a missing boost block, a duration of zero, a multiplier of 1, an unknown job, a slot outside the menu, or two entries on the same slot
- A broken boost entry is kept out of the shop entirely, instead of taking farmpoints and granting nothing
- Entries on the balance or close button slots now draw on top, so they show up instead of hiding underneath
📊 Menus and the Action Bar
- The boosts menu counts down while you watch it, no closing and reopening. The rate is
feedback.boost-menu-refresh-ticks - The action bar carries more: the job, xp gained, xp to the next level, money paid, a progress bar, the block you broke, and any farmpoints from it. Edit
job.xp-actionbarin your language file to drop anything you do not want - Other plugins' placeholders work in the action bar, so you can put a collection counter or anything else on the end of it
- Prestige shows on the main
/jobspage, under the job icon: the prestige level and what it gives in pay, farmpoints, drop chance and xp per level. Only on jobs you have prestiged, unless you setjob-prestige.show: always - Leaderboards update within seconds of a level up rather than minutes
- How to earn xp is editable, per job with
how-to-earninjobs.yml, or for every job at once inmenus.yml
🔌 A Developer API
CoreJobs now fires a cancellable event before every payout, so another plugin on your server can multiply, replace or cancel what a player earns. Three events, all in cc.arrowtan.corejobs.api.event:
CoreJobsXpGainEvent
CoreJobsMoneyGainEvent
CoreJobsFarmpointsGainEvent
That is what lets a rank, an armour set, a pet or a crystal carry its own job bonus, or a region cancel payouts entirely.
- Each event hands over the player, the job, the base value, the CoreJobs boost multiplier, and a settable final value, which is what actually gets paid
- They fire after the CoreJobs boost and before the payout, so an outside bonus stacks on top of a running boost instead of replacing it. A x1.25 set bonus during a x2 boost pays x2.5
- Cancelling the xp banks nothing and skips the level check, while the money and farmpoints from the same action still pay
- Admin commands fire nothing, and a payout of 0 fires nothing
- Main thread and synchronous, so a handler can read worn armour, a held item or a permission
A server with nothing listening sees no difference at all.
👀 Outside Bonuses Are Visible
A plugin granting a bonus can also report it, so players can see where their multiplier is coming from instead of guessing.
- A new
externalline in the boosts menu shows a gear bonus next to the boosts, naming the plugin it came from - New placeholders for the real total and for the outside share on its own:
%corejobs_total_<type>_multiplier% %corejobs_total_<type>_amount%
%corejobs_external_<type>_multiplier% %corejobs_external_<type>_amount%
%corejobs_external_<type>_source%
Both take the same optional job part as the boost placeholders. Your existing %corejobs_boost_<type>_...% placeholders are untouched and still mean the boost the player bought, so nothing on your scoreboard changes meaning.
This is display only. Nothing reported this way reaches a payout, so a bonus applied through the events is never counted twice. The refresh rate is boosts.external-refresh-ticks in config.yml.
🔎 Placeholder Troubleshooting
If a placeholder from another plugin shows up as raw text, /corejobs papi <text> tells you why. It prints what you wrote, what PlaceholderAPI filled in, and whether that expansion is registered at all.
The console also names the lines at fault on start if PlaceholderAPI is missing and your language file uses placeholders, instead of staying quiet about it.
📋 Version Breakdown
| Version | Focus |
1.4.0 |
A developer API: three cancellable events letting another plugin multiply, replace or cancel any job payout, plus a registry so an outside bonus shows in the boosts menu and in placeholders. |
1.3.0 |
Shop entries you can create, sell and remove from in game, validation of broken entries in the console, and /corejobs papi for tracking down a placeholder that will not resolve. |
1.2.0 |
Money and farmpoints boosts alongside xp, one of each running at once, per-kind placeholders, and other plugins' placeholders usable in the action bar. |
1.1.0 |
Boosts that arrive as an item, a boosts menu that counts down live, a fuller action bar, and prestige shown on the main jobs page. |
1.0.2 |
The boost queue: a weaker boost freezes with its time saved and starts when the stronger one ends, with its own item in the menu. |
1.0.1 |
Boost stacking modes, buying the same boost extending its time, boosts surviving server downtime, and leaderboards updating within seconds of a level up. |
📦 Install
Stop the server, replace the old jar in plugins/, and start it again. Your config files and your database are kept, and new keys are added to config.yml, jobs.yml, menus.yml, shop.yml and your language files automatically.
Read the documentation | Developer API | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Statistics
Views
Purchases
Downloads
File size
Published
Updated
Info
Share & Earn
Share and earn part of the profits, an estimated €0.8 per product sale.