Skip to content
ShadowMC

Configuration

ShadowMinions

Little workers that keep producing while the player is away.

Premium v1.0.4

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.

What’s inside

11 files · 304 settings

Start with: config.yml

Settings

The files that decide how the plugin behaves. Start here.

config.yml

General settings
67 settings
plugins/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-version1

General

general7 keys
languageen_US

The 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-languagetrue

Every 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-symboltrue

Also accept the section symbol in texts, on top of the ampersand. Only useful if you paste text from old configurations of other plugins.

update-filestrue

On 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-every60s

How 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-timeout30s

How 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-id0

This 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 key
enabledtrue

The 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 keys
every-ticks10

How 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-tick40

How 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-turn4096

How 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 keys
minions-per-player5

How many minions a player may have with no special permission.

island-levels-per-minion0

One 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-bonus20

How 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-leveltrue

Minions 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 key
max-hours24

How 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 keys
auto-selltrue

Automatic 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.

currencymoney

Which ShadowEconomy currency to credit. Empty or "money" means the server's default one.

warn-when-fulltrue

Warn 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 keys
enabledtrue
interval-multiplier0.5

How 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 keys

How 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.

COAL90000
CHARCOAL90000
COAL_BLOCK900000
BLAZE_ROD300000
LAVA_BUCKET600000
DRIED_KELP_BLOCK120000
fuel
custom{ }

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: 21600000

Upgrade

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 keys
itemNETHER_STAR

The item that is worth one upgrade.

experience100

How 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 keys
show-radiustrue

Show 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-seconds5

For how many seconds the particles stay. Only whoever asked for them sees them.

nameplatetrue

The 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 keys
from-explosionstrue

Minions 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-pistonstrue

Pistons 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 keys
shadoweconomytrue

The prices and the money of automatic selling.

shadowregionstrue

"Can this player build here?", asked when placing.

shadowcrazychesttrue

The VoidChest: a minion linked to a VoidChest sells instead of filling. It is one half of the produce-sell-earn loop.

shadowskyblocktrue

The 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.

shadowcustomizertrue

Custom minion appearance and custom items in their produce tables.

shadowoptimizertrue

How many minions to serve per tick when the server is under load, and the promise that its cleanups will not touch our armour stands.

objectivestrue

ShadowQuests 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 keys
table-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-queriesfalse

Writes every query to the console. Only to understand a problem: on a live server it fills the log in minutes.

storage.mysql7 keys
enabledfalse
host127.0.0.1
port3306
databaseshadowminions
userroot
password''
parameters'useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8'
storage
fallback-to-localtrue

If 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 key
auto-serverfalse

Lets 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 keys
maximum10
minimum-idle2
connection-timeout-ms10000
idle-timeout-ms600000
max-lifetime-ms1800000

Licence

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 keys

THE 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-days7

How 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-iptrue

Asks 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
plugins/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: 8000

It 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 list

THE "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-version2
jobs7 keys

Miner

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 keys
engineminer

Which 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_PICKAXE

The item that stands for this job in the menus.

jobs.miner.tool-by-level4 keys

The 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_PICKAXE
4IRON_PICKAXE
7DIAMOND_PICKAXE
10NETHERITE_PICKAXE
jobs.miner
head''
interval-ms24000

Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.

speed-per-level0.08

How 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.10

How 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.

radius1

How far it reaches AT LEVEL 1, in blocks around itself.

radius-per-level0

How many blocks the reach grows per level. 0 = never grows.

max-radius1

The ceiling of that growth, whatever the level says.

storage384

How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.

storage-per-level64

How many the warehouse gains per level.

max-level10

The highest level this job can reach with upgrades.

experience-per-action1

Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.

experience-base50

Experience needed to go from level 1 to level 2.

experience-growth1.6

How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.

fueltrue

Whether this job burns fuel while it works (see fuel in config.yml).

offline-productiontrue

Whether it keeps working while its owner is away.

blocks[ ]

Empty: it mines whatever it finds in front of it.

jobs.miner.world6 keys
consumetrue
regenerate-after-ms0

The 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.

replantfalse
height0

ZERO, 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.

depth2

How 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-depth5
jobs.miner
price0

What it costs in the shop. Remove it and it cannot be bought.

currency''

Which currency that price is in.

jobs.miner.scheme3 keys

The colour scheme of its panel, from menus/scheme.yml.

rows
[........., ....W...., ..M.SC..., ....L...., .........]+2
jobs.miner.scheme.legend4 keys
S
{ 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.scheme
lines["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 keys
enginelumberjack

Which 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_AXE

The item that stands for this job in the menus.

interval-ms30000

Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.

speed-per-level0.08

How 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.10

How 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.

radius3

How far it reaches AT LEVEL 1, in blocks around itself.

radius-per-level0.2

How many blocks the reach grows per level. 0 = never grows.

max-radius6

The ceiling of that growth, whatever the level says.

storage384

How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.

storage-per-level64

How many the warehouse gains per level.

max-level10

The highest level this job can reach with upgrades.

experience-per-action2

Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.

experience-base55

Experience needed to go from level 1 to level 2.

experience-growth1.6

How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.

fueltrue

Whether this job burns fuel while it works (see fuel in config.yml).

offline-productiontrue

Whether 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 keys
consumetrue
regenerate-after-ms0
replanttrue

Without this the forest runs out and the minion stops on its own.

height2
jobs.lumberjack
price0

What it costs in the shop. Remove it and it cannot be bought.

currency''

Which currency that price is in.

jobs.lumberjack.scheme3 keys

The colour scheme of its panel, from menus/scheme.yml.

rows
[T...T...T, ........., T...M...T, ........., T...T...T]+2
jobs.lumberjack.scheme.legend1 key
T
{ item: OAK_SAPLING, name: 'lang:job.lumberjack.legend.saplings', lore: ['lang:job.lumberjack.legend.saplings-lore'] }+2
jobs.lumberjack.scheme
lines["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 keys
enginefarmer

Which 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_HOE

The item that stands for this job in the menus.

interval-ms26000

Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.

speed-per-level0.08

How 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.10

How 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.

radius3

How far it reaches AT LEVEL 1, in blocks around itself.

radius-per-level0.2

How many blocks the reach grows per level. 0 = never grows.

max-radius6

The ceiling of that growth, whatever the level says.

storage384

How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.

storage-per-level64

How many the warehouse gains per level.

max-level10

The highest level this job can reach with upgrades.

experience-per-action1

Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.

experience-base50

Experience needed to go from level 1 to level 2.

experience-growth1.6

How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.

fueltrue

Whether this job burns fuel while it works (see fuel in config.yml).

offline-productiontrue

Whether it keeps working while its owner is away.

blocks[ ]

Empty: anything that ripens. Fill it to keep it to one crop.

jobs.farmer.world4 keys
consumefalse

The crop is broken like a player would and replanted with one seed; the tilled soil underneath is never touched.

regenerate-after-ms0
replantfalse
height1
jobs.farmer
price0

What it costs in the shop. Remove it and it cannot be bought.

currency''

Which currency that price is in.

jobs.farmer.scheme3 keys

The colour scheme of its panel, from menus/scheme.yml.

rows
[CCCCCCCCC, CCCCCCCCC, CCCCMCCCC, CCCCWCCCC, CCCCCCCCC]+2
jobs.farmer.scheme.legend2 keys
C
{ 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.scheme
lines["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 keys
enginefisher

Which 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_ROD

The item that stands for this job in the menus.

interval-ms34000

Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.

speed-per-level0.07

How 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.08

How 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.5

Fisher only: Luck of the Sea gained per level.

radius3

How far it reaches AT LEVEL 1, in blocks around itself.

radius-per-level0.2

How many blocks the reach grows per level. 0 = never grows.

max-radius6

The ceiling of that growth, whatever the level says.

storage320

How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.

storage-per-level48

How many the warehouse gains per level.

max-level10

The highest level this job can reach with upgrades.

experience-per-action2

Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.

experience-base60

Experience needed to go from level 1 to level 2.

experience-growth1.6

How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.

fueltrue

Whether this job burns fuel while it works (see fuel in config.yml).

offline-productiontrue

Whether it keeps working while its owner is away.

blocks[ ]
jobs.fisher.world4 keys
consumefalse
regenerate-after-ms0
replantfalse
height1
jobs.fisher
price0

What it costs in the shop. Remove it and it cannot be bought.

currency''

Which currency that price is in.

jobs.fisher.scheme3 keys

The colour scheme of its panel, from menus/scheme.yml.

rows
[........., ..WWWWW.., ..WWWWW.., ..WWWWW.., ....M....]+2
jobs.fisher.scheme.legend1 key
W
{ item: WATER_BUCKET, name: 'lang:job.fisher.legend.water', lore: ['lang:job.fisher.legend.water-lore'] }+2
jobs.fisher.scheme
lines["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 keys
enginekiller

Which 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_SWORD

The item that stands for this job in the menus.

interval-ms26000

Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.

speed-per-level0.07

How much each level shortens that wait. 0.08 = 8% faster per level, and it compounds: at level 10 the wait is about half.

amount1
yield-per-level0.10

Careful with this one: it multiplies loot that nobody wrote down.

radius4

How far it reaches AT LEVEL 1, in blocks around itself.

radius-per-level0.25

How many blocks the reach grows per level. 0 = never grows.

max-radius8

The ceiling of that growth, whatever the level says.

storage384

How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.

storage-per-level64

How many the warehouse gains per level.

max-level10

The highest level this job can reach with upgrades.

experience-per-action2

Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.

experience-base70

Experience needed to go from level 1 to level 2.

experience-growth1.7

How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.

fueltrue

Whether this job burns fuel while it works (see fuel in config.yml).

offline-productiontrue

Whether it keeps working while its owner is away.

blocks[ ]
jobs.killer.world4 keys
consumefalse
regenerate-after-ms0
replantfalse
height2
jobs.killer.enchants3 keys
looting{ 3: 1, 6: 2, 9: 3 }
sweeping{ 4: 1, 8: 2 }
fire-aspect{ 5: 1 }
jobs.killer.scheme3 keys

The colour scheme of its panel, from menus/scheme.yml.

rows
[XXXXXXXXX, X.......X, X...M...X, X.......X, XXXXSXXXX]+2
jobs.killer.scheme.legend2 keys
X
{ 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.scheme
lines["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 keys
enginefeeder

Which 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_FURNACE

The item that stands for this job in the menus.

interval-ms15000

Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.

speed-per-level0.05

How 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

Unused: a feeder collects nothing, so this stays at 0.

radius1

A 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-level0

How many blocks the reach grows per level. 0 = never grows.

max-radius1

The ceiling of that growth, whatever the level says.

storage512

How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.

storage-per-level128

How many the warehouse gains per level.

max-level10

The highest level this job can reach with upgrades.

experience-per-action2

Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.

experience-base60

Experience needed to go from level 1 to level 2.

experience-growth1.6

How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.

fuelfalse

A feeder does not burn fuel itself: it would be spending the very thing it is there to hand out.

offline-productiontrue

Whether it keeps working while its owner is away.

blocks[ ]
jobs.feeder.world4 keys
consumefalse
regenerate-after-ms0
replantfalse
height0
jobs.feeder
produce{ }

Empty on purpose: what it makes ends up in somebody else's tank.

jobs.feeder.scheme3 keys

The colour scheme of its panel, from menus/scheme.yml.

rows
[....H...., ....M...., ........., m...C...m, .........]+2
jobs.feeder.scheme.legend3 keys
H
{ 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.scheme
lines["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 keys
enginebreeding

Which 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.

iconWHEAT

The item that stands for this job in the menus.

interval-ms30000

Milliseconds between one action and the next AT LEVEL 1. 24000 = one action every 24 seconds. Lower is faster.

speed-per-level0.07

How 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.10

How 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.

radius4

How far it reaches AT LEVEL 1, in blocks around itself.

radius-per-level0.2

How many blocks the reach grows per level. 0 = never grows.

max-radius8

The ceiling of that growth, whatever the level says.

storage320

How many items its warehouse holds AT LEVEL 1. Full means it stops and says so above its head.

storage-per-level48

How many the warehouse gains per level.

max-level10

The highest level this job can reach with upgrades.

experience-per-action1

Experience earned by ONE action. Multiply by the actions of a day to see how long a level really takes.

experience-base55

Experience needed to go from level 1 to level 2.

experience-growth1.6

How much that cost is multiplied at each level. 1.6 means every level costs 60% more than the one before.

fueltrue

Whether this job burns fuel while it works (see fuel in config.yml).

offline-productiontrue

Whether it keeps working while its owner is away.

blocks[ ]
jobs.breeding.world4 keys
consumefalse
regenerate-after-ms0
replantfalse
height2
jobs.breeding.herd1 key

Breeder only: how large the herd may grow before it starts culling.

max30

How 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 keys
looting{ 4: 1, 7: 2, 10: 3 }
fire-aspect{ 6: 1 }
jobs.breeding.scheme3 keys

The 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 keys
F
{ 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.scheme
lines["lang:job.breeding.scheme"]

Languages

The texts the plugin shows to players, one file per language.

lang/

Texts and messages
2 files
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.

FileLanguageTexts
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

  • prefix 1
  • common 6
  • state 1
  • command 12
  • confirm 6
  • item 5
  • nameplate 2
  • stop 10
  • breeding 1
  • place 8
  • pickup 4
  • minion 5
  • collect 2
  • fuel 5
  • direction 4
  • facing 1
  • links 9
  • chest 8
  • sell 2
  • upgrade 4
  • skin 9
  • teleport 2
  • info 7
  • stats 19
  • menu 88
  • job 46
  • license 39
  • locked 5

All the documentation