Configuration
ShadowMinions
Little workers that keep producing while the player is away.
Where the files are
plugins/ShadowMinions/ The plugin creates them on first start and updates them by itself on new versions, keeping your changes.
Applying changes
/minion reload Reloads the files without restarting the server.
No setting found
Try another word, or search every plugin.
Settings
The files that decide how the plugin behaves. Start here.
config.yml
General settings 67 settings
config.ymlplugins/ShadowMinions/config.yml File notes
This file explains the WHY of every option, not just the what. If a line does not convince you, the comment above it should tell you what happens when you change it: if it does not, that is a flaw in this file, not in you.
THE LANGUAGE OF THIS FILE. Keys and comments are English, everywhere and always: a setting is something you type, an admin on the other side of the world has to recognise it, and it ends up pasted into support tickets. The only text that changes language is what a PLAYER reads, and that lives in lang/ - English by default, set with general.language below.
Two things are always true:
* A wrong value never stops the plugin. It gets replaced with the default
and written to the console with the exact path and what was expected. You can make mistakes without fear.
* What you change stays yours. On update your files are moved to the new
version automatically: new options and comments arrive, every value you changed is carried over, the old files are kept in backup/<date>/, and if something needs your attention you will find PORTING-<version>.txt in the plugin folder. There is no need to start over at every update.
THE JOBS ARE NOT HERE. They live in minions.yml: which minions exist, what they produce, how often and with what radius. That is a table, and tables are better off on their own.
config-version1General
general7 keyslanguageen_USThe server's default language. The plugin ships en_US and it_IT in lang/, and you can add more: a lang/fr_FR.yml file is picked up on its own.
follow-client-languagetrueEvery player sees messages in their own client language, when that language exists. On by default because it is free and because a server with players from two countries almost always wants it; turn it off if you prefer everyone to read the same thing.
accept-section-symboltrueAlso accept the section symbol in texts, on top of the ampersand. Only useful if you paste text from old configurations of other plugins.
update-filestrueOn update, moves this file, minions.yml, lang/ and menus/ to the new version: what you changed is carried over, what you never touched takes the new default, the previous files go to backup/<date>/ and anything that could not be carried is listed in PORTING-<version>.txt. Only turn it off if you manage the files with a tool of your own: with it off your files are never rewritten, and a message missing from them is read from the copy inside the jar.
save-every60sHow often to write pending changes to the database. Nothing is ever lost either way: on shutdown there is a blocking write that drains the queue. Raising it reduces writes on a server with many minions, lowering it reduces how much is lost in a crash.
confirmation-timeout30sHow long a confirmation request lasts before it expires. Under ten seconds it becomes a race; over a minute, a player clicks CONFIRM on a question they no longer remember asking.
bstats-id0This plugin's id on bstats.org. It only serves to know how many servers use it and on which version; it sends no names, no addresses, no coordinates.
Keep reading
0 = use the id built into the plugin. A number above 0 written here takes its place. While both are 0 the statistics do NOT start at all, and that is fine: a wrong id does not produce "no data", it produces data that lands on somebody else's page, and that cannot be undone.
To turn them off, see the "metrics" section right below.
bStats (anonymous usage statistics, https://bStats.org)
What is sent, every 30 minutes: a random server id (serverUuid, not derived from anything), the plugin version, the Minecraft/Paper and Java versions, the operating system and core count, the online mode, how many players are online (a number only) and the licence tier (free/premium/creator). NO player data: no names, no UUIDs, no addresses, no worlds, no coordinates. Nothing is sent while the plugin waits for a licence.
Keep reading
false switches off this plugin only. enabled: false in plugins/bStats/config.yml switches off every bStats plugin on the server at once.
metrics1 keyenabledtrueThe queue
This is the heart of the plugin, and the reason it holds five hundred minions where others stop at a hundred.
Keep reading
There is no task per minion. There is ONE queue ordered by "whose turn is next", and each round serves only whoever is due. A minion waiting thirty seconds is looked at once and served once, not sixty times. With this design a thousand minions cost the same as ten.
On Folia the round only picks who is due: each due minion is then handed to the thread that owns its piece of the world, and its turn runs there.
queue3 keysevery-ticks10How often, in ticks, the queue looks for who is due. Ten ticks is half a second: often enough that no delay is visible, rare enough to cost nothing. Raising it to 20 halves the number of wake-ups and moves every turn by at most half a second, which nobody notices.
max-per-tick40How many minions may be served in a single round, per region. The ones left over are NOT lost: they stay at the head of the queue and are first next round. This is a brake, not a cap on production - what a minion would have produced is still there, in the form of elapsed time.
Keep reading
Forty is sized for the worst moment, which is the first round after a restart, when every minion is due at once. With ShadowOptimizer installed this number drops on its own when the server is under load.
max-cycles-per-turn4096How many cycles at most a single minion may clear in one turn. This is a parachute: with a very short interval and a very high hour cap, a return could produce absurd numbers. The storage would stop them anyway, but it is better to stop them before computing them.
How many minions
The cap is built like this:
max( the number below , permission shadowminions.limit.<n> )
+ island level bonus = what the server grants
...and then the licence trims. On a free server three remain, however high the number: it is the free version's limit and it cannot be worked around from a file, because otherwise it would not be a limit.
limits4 keysminions-per-player5How many minions a player may have with no special permission.
island-levels-per-minion0One extra minion every so many island levels. Zero turns the bonus off.
This is the mechanic that holds a skyblock together: minions produce, the production raises the island level, the level grants more minions. A player comes back the next day because that number went up while they were away. Needs ShadowSkyBlock; without it, this value does nothing.
max-island-bonus20How many minions the island bonus may grant at most, so that a very high level island does not end up granting two hundred.
count-towards-island-leveltrueMinions count towards the island level calculation. Only turn this off if you prefer the level to depend solely on what has been built.
Offline production
This is THE feature: a minion produces even while the player is away.
Keep reading
It is not simulated, it is COMPUTED: elapsed time divided by interval, times the yield. It costs the same for one minute and for three months. If it were simulated, the return of somebody away for a week would stall the server at the exact moment they come back, which is the worst possible one.
offline-production1 keymax-hours24How many hours of work accumulate at most. Twenty-four by default.
Keep reading
THE CAP IS NOT STINGINESS. Without it, somebody returning after three months gets two hundred thousand items in their face, and that stuff all goes on sale at once: it is not a gift to them, it is the end of your server's economy. With twenty-four hours, whoever drops by once a day never loses anything - which is exactly the behaviour worth rewarding.
Zero removes the cap. That is a legitimate choice on a private server among friends where the economy does not matter; on a public server it is almost always a mistake you discover three months later.
On the free version the cap is two hours regardless.
Deposit
Where what a minion produces ends up, in order:
Keep reading
1. the linked VoidChest -> sells on its own, never fills up 2. direct selling -> when auto-sell below is on (whole server) 3. the linked chest -> fills up 4. another minion -> the harvest lands in its storage 5. the minion's storage -> and when that is full, the minion STOPS
A minion never throws anything away. When there is no room left it stops working and writes it above its head, and starts again on its own as soon as somebody empties it.
deposit5 keysauto-selltrueAutomatic selling: the harvest becomes money without anybody opening a chest. Needs ShadowEconomy, which decides the prices with its own price list - not a table written here, which would be a second economy to keep in sync with the first.
This is a Premium feature. On a free server the minion deposits normally, and nothing is lost.
currencymoneyWhich ShadowEconomy currency to credit. Empty or "money" means the server's default one.
link-radius8How far to look for a chest to link when the minion is placed.
auto-linktrueLink the first chest found on its own when the minion is placed.
On by default because it removes the single most forgotten step of all: you place the minion, you place the chest, and then you wonder why the minion puts nothing in it. Whoever wants a specific chest links it from the panel, which stays the explicit way.
warn-when-fulltrueWarn the owner in chat when one of their minions stops because it is full. Once per stop, not on every attempt.
Fuel
Optional. A minion with fuel works faster while it has some, then goes back to its normal speed. It is not needed to make it work: it is there to give something to spend to whoever already has everything.
This is a Premium feature. On a free server minions run at their normal speed, which is the one they were designed around.
fuel4 keysenabledtrueinterval-multiplier0.5How much the wait shortens with fuel burning. 0.5 means half the time, that is twice the speed. One turns the effect off.
Do not go too low: under 0.25 a fuelled minion produces four times as much, and at that point fuel is no longer a bonus, it is the right way to play - with the consequence that whoever has none feels behind.
fuel.types6 keysHow much an item is worth, in milliseconds of accelerated work. 60000 = one minute. A misspelled material is skipped and reported, without costing you the others.
COAL90000CHARCOAL90000COAL_BLOCK900000BLAZE_ROD300000LAVA_BUCKET600000DRIED_KELP_BLOCK120000fuelcustom{ }Custom items worth their own duration, whatever they are made of.
Keep reading
A line under "types" applies to EVERY item of that material. A line here applies to one precise item, recognised by the mark that custom-item plugins put on their own objects - the modern one (item-model) or the historical one (model-data). So a canister made out of a blaze rod can be worth six hours without a plain blaze rod being worth anything but its five minutes.
material the base material, what you see in the inventory. Required. value how long it is worth, in milliseconds. Required. item-model the item model key, e.g. 'shadow:fuel_canister' model-data the custom model data number, e.g. 7001
At least one of item-model and model-data is required: without a mark the line would match every item of that material, which is what "types" is for and is easier to read there.
Empty by default. The example below is commented out on purpose - enabling it without an item that actually carries that mark does nothing at all.
custom:
fuel-canister:
material: BLAZE_ROD
model-data: 7001
value: 21600000Upgrade
A minion levels up by working, for free and slowly. The item below is the shortcut: it grants experience in bulk and can raise several levels at once.
Keep reading
There is deliberately no upgrade purchasable with the server currency: with the item it is YOU who choose where to put it - a ShadowCrazyChest crate, a ShadowEconomy shop, a ShadowBattlePass reward - and how much it costs, using the tools you already have.
upgrade2 keysitemNETHER_STARThe item that is worth one upgrade.
experience100How much experience it grants. Compare it with experience-base and experience-growth of the job in minions.yml to work out how many levels that is: with base 50 and growth 1.6, one hundred experience takes you from level 1 to nearly 3.
Appearance
appearance4 keysshow-radiustrueShow the working radius with particles when a minion's panel is opened or when it is placed.
There is NO listener on player movement, and there never will be: a PlayerMoveEvent fires twenty times a second per player, and it would be the highest cost in the whole plugin for its least important feature. The radius shows when you ask for it, which is also the only moment you care.
particle-seconds5For how many seconds the particles stay. Only whoever asked for them sees them.
nameplatetrueThe name above the minion's head, with the job, the level and - when it is stopped - the reason. It is the fastest way to notice that a minion has a full storage without opening anything.
skins[GRASS_BLOCK, OAK_LOG, STONE, COBBLESTONE, SAND, PUMPKIN, CARVED_PUMPKIN, JACK_O_LANTERN, MELON, HAY_BLOCK, COAL_BLOCK, IRON_BLOCK, GOLD_BLOCK, DIAMOND_BLOCK, EMERALD_BLOCK, NETHERITE_BLOCK, LAPIS_BLOCK, REDSTONE_BLOCK, …+25
The blocks a player can put on a minion's head from its panel ("Aspetto"). Any item works; blocks and mob heads look best. An empty list keeps the built-in set. A player's face - a name typed in chat - is a separate thing, behind the permission shadowminions.skin.player.
Protection
protection3 keysfrom-explosionstrueMinions do not break from explosions and cannot be punched apart. The entity is born invulnerable already: this is the second line of defence, the one that holds even when another plugin removes the invulnerability.
from-pistonstruePistons do not move minions. An armour stand does not move anyway, but there is always a plugin that invents one which does.
blocked-worlds[ ]The worlds where minions cannot be placed. A list of names. Typically the spawn world or an arena.
Integrations
Each one is optional and none is a requirement. Turning one off here means not looking for it at all, which is different from "it is absent": it is what you want when you have that plugin but do not want the two to talk.
Keep reading
When a piece switches off because another plugin is missing, it is written to the console once, with the name of what is missing and what went off.
integrations7 keysshadoweconomytrueThe prices and the money of automatic selling.
shadowregionstrue"Can this player build here?", asked when placing.
shadowcrazychesttrueThe VoidChest: a minion linked to a VoidChest sells instead of filling. It is one half of the produce-sell-earn loop.
shadowskyblocktrueThe island: the minion cap that grows with the level, and - above all - the only API in the suite that can say whether an OFFLINE player may touch a block. Without it, a minion digging while its owner is away would have nobody to ask for permission.
shadowcustomizertrueCustom minion appearance and custom items in their produce tables.
shadowoptimizertrueHow many minions to serve per tick when the server is under load, and the promise that its cleanups will not touch our armour stands.
objectivestrueShadowQuests and ShadowBattlePass: minions advance quests and challenges.
Storage
By default an H2 file inside the plugin folder: nothing to install, no user to create, no password.
Shared MySQL is a Premium feature. On a free server, setting enabled: true below is not an error: the plugin stays on the local file and writes it to the console, with all of its data intact.
storage6 keystable-prefixsmn_The table prefix. Only change it if you share a database with something else. Only letters, digits and underscores are kept: a table name cannot be bound as a parameter, so it ends up concatenated inside the SQL, and "an admin writes it" is not a reason to leave a concatenation open.
log-queriesfalseWrites every query to the console. Only to understand a problem: on a live server it fills the log in minutes.
storage.mysql7 keysenabledfalsehost127.0.0.1port3306databaseshadowminionsuserrootpassword''parameters'useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8'storagefallback-to-localtrueIf MySQL does not answer at startup, restart on the local file instead of not starting at all. On by default: a server that will not come up because of an unreachable database is a far bigger problem than one that comes up with old data. Set it to false only if you would rather find out at once.
storage.h21 keyauto-serverfalseLets another process open the same H2 file while the server is running. Only needed if you want to look inside it with an external tool.
storage.pool5 keysmaximum10minimum-idle2connection-timeout-ms10000idle-timeout-ms600000max-lifetime-ms1800000Licence
The key does NOT go here. The activation command writes it on its own into license.yml, which is a separate file on purpose: a support request that says "send me your config" must not arrive with somebody's licence in it.
Keep reading
/minion license claim <code> asks the activation service /minion license activate <key> activates a key you already have /minion license refresh rereads and rechecks
license4 keysTHE KEY LIVES IN license.yml (same folder as this file), or in the central plugins/ShadowControl/licenses.yml for the whole suite. The 'key' below is only a fallback for deploy systems that generate config.yml: leave it empty.
The key does NOT live here: it lives in license.yml, in this folder, written at first start (or in plugins/ShadowControl/licenses.yml for the whole suite).
Leave it empty. It is here for whoever runs twenty servers off the same config and would rather set it once.
grace-days7How many days of grace before falling back to the free version when something does not add up: a subscription that just expired (the renewal has almost always already started) or an address that does not match (far more often a NAT or a proxy than a thief).
server-ip''The address your players know the server by. Only needed behind a proxy, where the machine never sees its own public address.
activation-url'https://shadow-licences.riccardobotins.workers.dev'The base address of the activation service. The plugin appends /claim and /check on its own. Empty means automatic activation is off and the key has to be pasted by hand.
resolve-public-iptrueAsks the activation service above (activation-url + /ip) how this server looks from outside: it answers with the address it sees, and nothing about the server is sent. It is the only reliable way to know your own public address from behind a NAT, and it is why a licence sold on a domain works on a machine whose local addresses are all 10.x. A failure is silent: the grace period exists precisely so that a server with no outbound internet keeps running. Only when a licence is installed: a server without a key asks nobody. false = never ask.
minions.yml
The minion jobs 211 settings
minions.ymlplugins/ShadowMinions/minions.yml File notes
This file holds WHICH minions exist on this server and what they do. The general settings - the queue, the limits, the deposit, the fuel - live in config.yml.
THE LANGUAGE OF THIS FILE. Keys, ids and comments are English: they are things you type, and an id is also what gets typed into /minion give <player> <job>. What a PLAYER reads - the "name" of each job and the words of its scheme - is not written here: a value such as "lang:job.miner.name" is a key into lang/, so every player reads it in their own language (change the words in lang/en_US.yml and lang/it_IT.yml, under job). Write plain text instead of the key - a job of your own, a name you like better - and that text is shown exactly as written, to every player.
A MINION IS A JOB, NOT A RESOURCE
There is no "cobblestone minion" and no "wheat minion" here, and that is the whole design. A minion works the REAL world and keeps the REAL drops of what it breaks: put a cobblestone generator in front of the miner and it produces cobblestone, put iron there and it produces iron. Nobody has to add anything to any list, and a block added by another plugin works on the day it is installed.
The consequence you should know about: a job that takes real drops has NO "produce" table, and that is not an omission. What it yields is decided by what it finds, not by what you write here.
DECIDING A SINGLE LEVEL BY HAND
The numbers below describe a CURVE: interval-ms with speed-per-level, storage with storage-per-level, radius with radius-per-level. Three numbers describe ten levels, and they keep working when you decide to have fifteen.
When you want one level to be a real jump - the level people save up for - add a "levels" table to that job and write it down:
levels:
5:
interval-ms: 12000
storage: 900
10:
radius: 6
interval-ms: 8000It reads "FROM this level up", the same as tool-by-level and enchants: writing 5 and 10 means the 5 line holds from level 5 to level 9. What you do not write keeps following the curve, so you only describe the levels that matter instead of listing all of them.
What can go in there: interval-ms, amount, radius, storage. Anything else is ignored and the plugin says so at start-up.
THE SEVEN ENGINES
miner breaks the block IN FRONT of itself, one per action, in the
time a player with its pickaxe would take - and keeps the real
drops. Looks two blocks ahead at level one, one more every
three levels, up to five. Faces wherever it was pointed when
placed. This is the one you build a cobblestone generator for.
lumberjack fells the whole tree whose BASE is within its radius - trunk,
branches and leaves, 2x2 trees included - keeps the real drops
and replants the base with the saplings the tree gave (four
for a 2x2 tree). Only grown trees: never a log house.
farmer harvests whatever is RIPE within its radius with the drops a
player would get, replants ONE seed of what it harvested (or
one from its storage), sows empty farmland with the seeds it
holds, and hoes dirt that has water within four blocks.
fisher casts, waits for the bite, reels in: fish, junk and treasure
with the game's own odds. Luck grows with the level.
killer kills hostile mobs FOR REAL and keeps what they actually
drop; Looting, Sweeping (more mobs per turn) and Fire Aspect
come with the levels, see "enchants".
feeder refuels the minions linked to it. Fills itself from a hopper
above its head, from a linked chest, or by hand. No radius:
it reaches whatever is linked, up to "max-links".
breeding breeds the animals around it with the food it takes from its
LINKED CHEST until the herd reaches "herd.max", then butchers
one adult per turn - with the drops a player would get - and
keeps the meat, leather and feathers.A LIVE TURN IS ONE REAL ACTION. A job that takes real drops never multiplies what it just harvested: the cycles it catches up on are only the ones it could not do because the chunk was unloaded or the server was down, and those use the remembered sample (below).
THE KEYS OF A JOB
engine one of the seven above. Required.
name what the player sees, with colours. TRANSLATABLE.
icon the material of the icon and of the placeable item
head a head texture: the full URL, the hex hash, or the
base64 blob. Empty uses the icon.
model a ShadowCustomizer model, empty for the plain look
interval-ms the wait between two actions at level 1
speed-per-level how much each level shortens it, 0.08 = 8%
amount NOT items per action: no shipped engine rolls a
table today. It is only the base of the "yield per
action" shown in the upgrade panel. Leave 1.
yield-per-level how much each level multiplies what one action
collects, real drops included: x(1 + this x
(level - 1)), rounded to a whole number. At 0.10
that is x1 up to level 5 and x2 from level 6.
radius how many blocks it looks at, at level 1
radius-per-level how many more per level
max-radius the radius ceiling
storage how many items fit in the storage at level 1
storage-per-level how many more per level
max-level how far it can climb
experience-per-action how much experience one action is worth
experience-base the experience to go from level 1 to 2
experience-growth how much that cost multiplies each level
fuel whether this job can burn fuel
offline-production whether it produces while the player is away
blocks WHICH blocks it may work on. LEAVE IT EMPTY and it
works on anything it finds - that is what makes a
miner a miner instead of the minion of one
material. Fill it only to restrict.
world what is left behind, and how far ahead it digs
produce a weighted item table. NO shipped engine reads it
today: six of the seven take real drops and the
feeder hands out fuel, so writing one changes
nothing. The same goes for "recipes", left over
from the smelter, which no longer exists.
enchants killer / breeding: the enchantments of the tool
by minion level, "from this level up":
enchants: { looting: {3: 1, 6: 2, 9: 3} }
looting = more loot, sweeping = one more mob per
turn per level, fire-aspect = cooked meat.
herd.max breeding only: the herd size it keeps
luck-per-level fisher only: Luck of the Sea per level (0.5 =
level 7 fishes like a Luck of the Sea III rod)
links-per-level feeder only: how many more minions per level
max-links feeder only: the ceiling on linked minions
scheme the placement drawing shown in the panel: "rows"
(five strings of nine letters, seen from above,
M = the minion, . = nothing), "legend" (what each
letter is: item, name, lore) and "lines". Names,
lore and lines take "lang:<key>" like "name".
price / currency what it is worth, to show it in the job listTHE "world" BLOCK
consume whether the block is removed, or just reset
regenerate-after-ms how long before it comes back, 0 = never
replant whether it plants a sapling where the trunk was
height how many blocks up and down it looks, per side
depth how far AHEAD the miner looks for a block at level 1
max-depth the depth ceiling. Depth grows by one every three
levels and stops here.Radius is symmetric on purpose: "radius: 3" means three blocks on each of the four sides, never three on one and two on the other, at every level. Depth is the single exception and it is directional by design - it is what makes a miner look like it is digging a tunnel.
WHAT A MINION PRODUCES WHILE YOU ARE AWAY
A job that takes real drops cannot look at the world while the chunk is unloaded, and offline production is COMPUTED and never simulated - the alternative is simulating six hundred thousand block breaks when somebody logs back in, which is how you bring a server down.
So the minion REMEMBERS the last real haul it made and keeps making that while you are gone. A miner in front of a cobblestone generator harvested cobblestone, so cobblestone it keeps producing. Change the wall in front of it and the memory updates itself on its first live action.
A freshly placed minion has no memory yet and produces nothing while you are away. That is honest: it has never seen what is in front of it. Watch it work once and it is set.
Note that a job taking real drops CONSUMES the blocks it breaks, offline cycles excluded. A miner without a generator in front eventually runs out of wall and stops - which is exactly why you put a generator there.
config-version2jobs7 keysMiner
Put a cobblestone generator in front of it. That sentence is the whole design of this job: it breaks what it finds ahead and keeps what that block gives, so the generator refills the wall and the minion never runs dry.
Keep reading
"blocks" is empty, so it mines ANYTHING it can break. Fill the list if you want to restrict it - for instance to stop it from eating an island made of dirt.
jobs.miner24 keysengineminerWhich of the seven engines drives it. Not a label: it decides what the minion actually does, and it cannot be invented.
name'lang:job.miner.name'What a PLAYER reads above its head and in the menus: a key into lang/, or your own text, shown as it is.
iconIRON_PICKAXEThe item that stands for this job in the menus.
jobs.miner.tool-by-level4 keysThe pickaxe it mines with, "from this level up". It decides HOW LONG a block takes - the same time a player holding that pickaxe would need, penalty included when the tier is too low for the block - and never WHAT it collects: the miner always takes what the block gives to a proper pickaxe, diamonds with a stone one too. Only slower. Remove the whole section and it mines at diamond speed at every level.
1STONE_PICKAXE4IRON_PICKAXE7DIAMOND_PICKAXE10NETHERITE_PICKAXEjobs.minerhead''interval-ms24000Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.
speed-per-level0.08How much each level shortens that wait. 0.08 = 8% faster per level, and it compounds: at level 10 the wait is about half.
yield-per-level0.10How much each level multiplies what one action collects - the real drops too - rounded to a whole number: at 0.10 it keeps x1 up to level 5 and x2 from level 6 to 10.
radius1How far it reaches AT LEVEL 1, in blocks around itself.
radius-per-level0How many blocks the reach grows per level. 0 = never grows.
max-radius1The ceiling of that growth, whatever the level says.
storage384How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.
storage-per-level64How many the warehouse gains per level.
max-level10The highest level this job can reach with upgrades.
experience-per-action1Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.
experience-base50Experience needed to go from level 1 to level 2.
experience-growth1.6How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.
fueltrueWhether this job burns fuel while it works (see fuel in config.yml).
offline-productiontrueWhether it keeps working while its owner is away.
blocks[ ]Empty: it mines whatever it finds in front of it.
jobs.miner.world6 keysconsumetrueregenerate-after-ms0The block does not come back on its own: what refills the wall is the generator you put there, and that is the point of this job.
replantfalseheight0ZERO, and it matters: the miner digs at ITS OWN level and nowhere else. Raise this and it also breaks the blocks above and below the line - which on flat ground means digging a pit under itself instead of a corridor in front of it.
depth2How far AHEAD it looks for a block: two at level 1, one more every three levels, up to five. It breaks ONE block per action, the nearest, and takes the time that block takes with the pickaxe of its level.
max-depth5jobs.minerprice0What it costs in the shop. Remove it and it cannot be bought.
currency''Which currency that price is in.
jobs.miner.scheme3 keysThe colour scheme of its panel, from menus/scheme.yml.
rows[........., ....W...., ..M.SC..., ....L...., .........]+2
jobs.miner.scheme.legend4 keysS{ item: STONE, name: 'lang:job.miner.legend.block', lore: ['lang:job.miner.legend.block-lore'] }+2
W{ item: WATER_BUCKET, name: 'lang:job.miner.legend.water', lore: ['lang:job.miner.legend.water-lore'] }+2
L{ item: LAVA_BUCKET, name: 'lang:job.miner.legend.lava', lore: ['lang:job.miner.legend.lava-lore'] }+2
C{ item: COBBLESTONE, name: 'lang:job.miner.legend.cobblestone', lore: ['lang:job.miner.legend.cobblestone-lore'] }+2
jobs.miner.schemelines["lang:job.miner.scheme"]Lumberjack
Plant saplings around it and it does the rest: it fells the whole tree whose base is in its radius - trunk, branches, leaves, 2x2 trees too - in one action, and replants the base with the saplings the leaves gave (four for a dark oak). Only grown trees: a log house has no grown leaves and is never touched.
jobs.lumberjack22 keysenginelumberjackWhich of the seven engines drives it. Not a label: it decides what the minion actually does, and it cannot be invented.
name'lang:job.lumberjack.name'What a PLAYER reads above its head and in the menus: a key into lang/, or your own text, shown as it is.
iconIRON_AXEThe item that stands for this job in the menus.
interval-ms30000Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.
speed-per-level0.08How much each level shortens that wait. 0.08 = 8% faster per level, and it compounds: at level 10 the wait is about half.
yield-per-level0.10How much each level multiplies what one action collects - the real drops too - rounded to a whole number: at 0.10 it keeps x1 up to level 5 and x2 from level 6 to 10.
radius3How far it reaches AT LEVEL 1, in blocks around itself.
radius-per-level0.2How many blocks the reach grows per level. 0 = never grows.
max-radius6The ceiling of that growth, whatever the level says.
storage384How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.
storage-per-level64How many the warehouse gains per level.
max-level10The highest level this job can reach with upgrades.
experience-per-action2Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.
experience-base55Experience needed to go from level 1 to level 2.
experience-growth1.6How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.
fueltrueWhether this job burns fuel while it works (see fuel in config.yml).
offline-productiontrueWhether it keeps working while its owner is away.
blocks[ ]Empty: any kind of log. Fill it to keep it to one wood.
jobs.lumberjack.world4 keysconsumetrueregenerate-after-ms0replanttrueWithout this the forest runs out and the minion stops on its own.
height2jobs.lumberjackprice0What it costs in the shop. Remove it and it cannot be bought.
currency''Which currency that price is in.
jobs.lumberjack.scheme3 keysThe colour scheme of its panel, from menus/scheme.yml.
rows[T...T...T, ........., T...M...T, ........., T...T...T]+2
jobs.lumberjack.scheme.legend1 keyT{ item: OAK_SAPLING, name: 'lang:job.lumberjack.legend.saplings', lore: ['lang:job.lumberjack.legend.saplings-lore'] }+2
jobs.lumberjack.schemelines["lang:job.lumberjack.scheme"]Farmer
It harvests whatever is ripe around it - wheat, carrots, potatoes, beetroot, nether wart, berries, cocoa - with the drops a player would get, and puts ONE seed back (from the harvest, or from its storage). It also sows empty farmland with the seeds it holds and hoes dirt that has water within four blocks. One action per turn, one minion for a field.
jobs.farmer22 keysenginefarmerWhich of the seven engines drives it. Not a label: it decides what the minion actually does, and it cannot be invented.
name'lang:job.farmer.name'What a PLAYER reads above its head and in the menus: a key into lang/, or your own text, shown as it is.
iconIRON_HOEThe item that stands for this job in the menus.
interval-ms26000Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.
speed-per-level0.08How much each level shortens that wait. 0.08 = 8% faster per level, and it compounds: at level 10 the wait is about half.
yield-per-level0.10How much each level multiplies what one action collects - the real drops too - rounded to a whole number: at 0.10 it keeps x1 up to level 5 and x2 from level 6 to 10.
radius3How far it reaches AT LEVEL 1, in blocks around itself.
radius-per-level0.2How many blocks the reach grows per level. 0 = never grows.
max-radius6The ceiling of that growth, whatever the level says.
storage384How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.
storage-per-level64How many the warehouse gains per level.
max-level10The highest level this job can reach with upgrades.
experience-per-action1Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.
experience-base50Experience needed to go from level 1 to level 2.
experience-growth1.6How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.
fueltrueWhether this job burns fuel while it works (see fuel in config.yml).
offline-productiontrueWhether it keeps working while its owner is away.
blocks[ ]Empty: anything that ripens. Fill it to keep it to one crop.
jobs.farmer.world4 keysconsumefalseThe crop is broken like a player would and replanted with one seed; the tilled soil underneath is never touched.
regenerate-after-ms0replantfalseheight1jobs.farmerprice0What it costs in the shop. Remove it and it cannot be bought.
currency''Which currency that price is in.
jobs.farmer.scheme3 keysThe colour scheme of its panel, from menus/scheme.yml.
rows[CCCCCCCCC, CCCCCCCCC, CCCCMCCCC, CCCCWCCCC, CCCCCCCCC]+2
jobs.farmer.scheme.legend2 keysC{ item: WHEAT, name: 'lang:job.farmer.legend.crops', lore: ['lang:job.farmer.legend.crops-lore'] }+2
W{ item: WATER_BUCKET, name: 'lang:job.farmer.legend.water', lore: ['lang:job.farmer.legend.water-lore'] }+2
jobs.farmer.schemelines["lang:job.farmer.scheme"]Fisher
It needs water within its radius and touches nothing at all. It casts, waits for the bite and reels in, with the game's own odds: fish 85%, junk 10%, treasure 5%. "luck-per-level" is Luck of the Sea by level: each point moves two out of the junk and into the treasure.
jobs.fisher23 keysenginefisherWhich of the seven engines drives it. Not a label: it decides what the minion actually does, and it cannot be invented.
name'lang:job.fisher.name'What a PLAYER reads above its head and in the menus: a key into lang/, or your own text, shown as it is.
iconFISHING_RODThe item that stands for this job in the menus.
interval-ms34000Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.
speed-per-level0.07How much each level shortens that wait. 0.08 = 8% faster per level, and it compounds: at level 10 the wait is about half.
yield-per-level0.08How much each level multiplies what one catch brings in, rounded to a whole number: at 0.08 it keeps x1 up to level 7 and x2 from level 8 to 10.
luck-per-level0.5Fisher only: Luck of the Sea gained per level.
radius3How far it reaches AT LEVEL 1, in blocks around itself.
radius-per-level0.2How many blocks the reach grows per level. 0 = never grows.
max-radius6The ceiling of that growth, whatever the level says.
storage320How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.
storage-per-level48How many the warehouse gains per level.
max-level10The highest level this job can reach with upgrades.
experience-per-action2Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.
experience-base60Experience needed to go from level 1 to level 2.
experience-growth1.6How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.
fueltrueWhether this job burns fuel while it works (see fuel in config.yml).
offline-productiontrueWhether it keeps working while its owner is away.
blocks[ ]jobs.fisher.world4 keysconsumefalseregenerate-after-ms0replantfalseheight1jobs.fisherprice0What it costs in the shop. Remove it and it cannot be bought.
currency''Which currency that price is in.
jobs.fisher.scheme3 keysThe colour scheme of its panel, from menus/scheme.yml.
rows[........., ..WWWWW.., ..WWWWW.., ..WWWWW.., ....M....]+2
jobs.fisher.scheme.legend1 keyW{ item: WATER_BUCKET, name: 'lang:job.fisher.legend.water', lore: ['lang:job.fisher.legend.water-lore'] }+2
jobs.fisher.schemelines["lang:job.fisher.scheme"]Killer
It kills hostile mobs for real, so Minecraft rolls their loot exactly as it would - the mobs of any other plugin included - and the minion keeps it, never dropped on the ground. Its sword grows with the levels: see "enchants". Sweeping is how many EXTRA mobs it strikes per turn.
Keep reading
It fires a real death event, so anything on your server that reacts to a mob dying will react to this too. While the owner is away it produces what its last real kill gave.
jobs.killer22 keysenginekillerWhich of the seven engines drives it. Not a label: it decides what the minion actually does, and it cannot be invented.
name'lang:job.killer.name'What a PLAYER reads above its head and in the menus: a key into lang/, or your own text, shown as it is.
iconDIAMOND_SWORDThe item that stands for this job in the menus.
interval-ms26000Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.
speed-per-level0.07How much each level shortens that wait. 0.08 = 8% faster per level, and it compounds: at level 10 the wait is about half.
amount1yield-per-level0.10Careful with this one: it multiplies loot that nobody wrote down.
radius4How far it reaches AT LEVEL 1, in blocks around itself.
radius-per-level0.25How many blocks the reach grows per level. 0 = never grows.
max-radius8The ceiling of that growth, whatever the level says.
storage384How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.
storage-per-level64How many the warehouse gains per level.
max-level10The highest level this job can reach with upgrades.
experience-per-action2Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.
experience-base70Experience needed to go from level 1 to level 2.
experience-growth1.7How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.
fueltrueWhether this job burns fuel while it works (see fuel in config.yml).
offline-productiontrueWhether it keeps working while its owner is away.
blocks[ ]jobs.killer.world4 keysconsumefalseregenerate-after-ms0replantfalseheight2jobs.killer.enchants3 keyslooting{ 3: 1, 6: 2, 9: 3 }sweeping{ 4: 1, 8: 2 }fire-aspect{ 5: 1 }jobs.killer.scheme3 keysThe colour scheme of its panel, from menus/scheme.yml.
rows[XXXXXXXXX, X.......X, X...M...X, X.......X, XXXXSXXXX]+2
jobs.killer.scheme.legend2 keysX{ item: COBBLESTONE, name: 'lang:job.killer.legend.room', lore: ['lang:job.killer.legend.room-lore'] }+2
S{ item: SPAWNER, name: 'lang:job.killer.legend.spawner', lore: ['lang:job.killer.legend.spawner-lore'] }+2
jobs.killer.schemelines["lang:job.killer.scheme"]Feeder
The minion that keeps the others running. Link the other minions to it from its panel and it tops them up on its own, always serving whichever one is running lowest.
Keep reading
THREE WAYS TO FILL IT, and it checks them in this order:
- a HOPPER above its head: drop coal in and it goes down by itself - a CHEST linked from its panel: it draws from there while there is anything left - its own storage, filled by hand from the panel - or by a miner linked to it as ITS chest, which is the loop worth building
It reaches one more minion per level, up to "max-links". The ceiling is deliberate: without it one high-level feeder would cover a whole island and the job would be a switch instead of a decision. With it, a big island wants two or three of them and where you put them matters.
jobs.feeder23 keysenginefeederWhich of the seven engines drives it. Not a label: it decides what the minion actually does, and it cannot be invented.
name'lang:job.feeder.name'What a PLAYER reads above its head and in the menus: a key into lang/, or your own text, shown as it is.
iconBLAST_FURNACEThe item that stands for this job in the menus.
interval-ms15000Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.
speed-per-level0.05How much each level shortens that wait. 0.08 = 8% faster per level, and it compounds: at level 10 the wait is about half.
yield-per-level0Unused: a feeder collects nothing, so this stays at 0.
radius1A feeder has no radius: it reaches whatever is linked to it, wherever it is, and the panel does not show one. The value stays at 1 only because every job has the key.
radius-per-level0How many blocks the reach grows per level. 0 = never grows.
max-radius1The ceiling of that growth, whatever the level says.
storage512How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.
storage-per-level128How many the warehouse gains per level.
max-level10The highest level this job can reach with upgrades.
experience-per-action2Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.
experience-base60Experience needed to go from level 1 to level 2.
experience-growth1.6How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.
fuelfalseA feeder does not burn fuel itself: it would be spending the very thing it is there to hand out.
offline-productiontrueWhether it keeps working while its owner is away.
blocks[ ]jobs.feeder.world4 keysconsumefalseregenerate-after-ms0replantfalseheight0jobs.feederproduce{ }Empty on purpose: what it makes ends up in somebody else's tank.
links-per-level1How many more links it gains per level.
max-links6How many other minions it can be linked to AT LEVEL 1.
jobs.feeder.scheme3 keysThe colour scheme of its panel, from menus/scheme.yml.
rows[....H...., ....M...., ........., m...C...m, .........]+2
jobs.feeder.scheme.legend3 keysH{ item: HOPPER, name: 'lang:job.feeder.legend.hopper', lore: ['lang:job.feeder.legend.hopper-lore'] }+2
C{ item: CHEST, name: 'lang:job.feeder.legend.chest', lore: ['lang:job.feeder.legend.chest-lore'] }+2
m{ item: ARMOR_STAND, name: 'lang:job.feeder.legend.linked', lore: ['lang:job.feeder.legend.linked-lore'] }+2
jobs.feeder.schemelines["lang:job.feeder.scheme"]Breeding
Link a chest to it and put the food in there: wheat for cows and sheep, carrots for pigs, seeds for chickens - Minecraft knows what each animal eats. It breeds two adults at a time until the herd around it reaches "herd.max", then it butchers one adult per turn, with the drops a player would get, and keeps them. With Fire Aspect the meat comes out cooked. Fence the animals in: the radius is where it looks for them.
jobs.breeding22 keysenginebreedingWhich of the seven engines drives it. Not a label: it decides what the minion actually does, and it cannot be invented.
name'lang:job.breeding.name'What a PLAYER reads above its head and in the menus: a key into lang/, or your own text, shown as it is.
iconWHEATThe item that stands for this job in the menus.
interval-ms30000Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.
speed-per-level0.07How much each level shortens that wait. 0.08 = 8% faster per level, and it compounds: at level 10 the wait is about half.
yield-per-level0.10How much each level multiplies the loot of one butchering, rounded to a whole number. Careful, as with the killer: it multiplies loot that nobody wrote down.
radius4How far it reaches AT LEVEL 1, in blocks around itself.
radius-per-level0.2How many blocks the reach grows per level. 0 = never grows.
max-radius8The ceiling of that growth, whatever the level says.
storage320How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.
storage-per-level48How many the warehouse gains per level.
max-level10The highest level this job can reach with upgrades.
experience-per-action1Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.
experience-base55Experience needed to go from level 1 to level 2.
experience-growth1.6How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.
fueltrueWhether this job burns fuel while it works (see fuel in config.yml).
offline-productiontrueWhether it keeps working while its owner is away.
blocks[ ]jobs.breeding.world4 keysconsumefalseregenerate-after-ms0replantfalseheight2jobs.breeding.herd1 keyBreeder only: how large the herd may grow before it starts culling.
max30How many animals it keeps around. Below this it breeds, at this it butchers one adult per turn. Thirty is a pen, not a lag machine.
jobs.breeding.enchants2 keyslooting{ 4: 1, 7: 2, 10: 3 }fire-aspect{ 6: 1 }jobs.breeding.scheme3 keysThe colour scheme of its panel, from menus/scheme.yml.
rows[FFFFFFFFF, F.A.A.A.F, FA..M..AF, F.A.A.A.F, FFFFCFFFF]+2
jobs.breeding.scheme.legend3 keysF{ item: OAK_FENCE, name: 'lang:job.breeding.legend.fence', lore: ['lang:job.breeding.legend.fence-lore'] }+2
A{ item: COW_SPAWN_EGG, name: 'lang:job.breeding.legend.animals', lore: ['lang:job.breeding.legend.animals-lore'] }+2
C{ item: CHEST, name: 'lang:job.breeding.legend.chest', lore: ['lang:job.breeding.legend.chest-lore'] }+2
jobs.breeding.schemelines["lang:job.breeding.scheme"]Languages
The texts the plugin shows to players, one file per language.
lang/
Texts and messages 2 files
lang/plugins/ShadowMinions/lang/ File notes
ShadowMinions - English
Every message the plugin shows to players, one file per language. The keys are not listed one by one: here are the files, how many texts they hold and the placeholders they use.
| File | Language | Texts |
|---|---|---|
lang/en_US.yml reference | English | 311 |
lang/it_IT.yml | Italiano | 311 |
Most used placeholders
The plugin replaces them with the right value: leave them written as they are.
<prefix><level><job><max><label><amount><position><radius><reason><stored><capacity><chest><item><storage>
Message groups
prefix1common6state1command12confirm6item5nameplate2stop10breeding1place8pickup4minion5collect2fuel5direction4facing1links9chest8sell2upgrade4skin9teleport2info7stats19menu88job46license39locked5