Skip to content
ShadowMC

Configuration

ShadowOneBlock

One block, eight phases, and two things no other oneblock has.

Premium v1.0.4

Where the files are

plugins/ShadowOneBlock/

The plugin creates them on first start and updates them by itself on new versions, keeping your changes.

Applying changes

/ob admin reload

Reloads the files without restarting the server.

What’s inside

16 files · 218 settings

Start with: config.yml

Settings

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

config.yml

General settings
82 settings
plugins/ShadowOneBlock/config.yml
File notes

The oneblock module of the Shadow suite.

A note on language

This file, like every other config, is written in English: keys, values and comments. The only text that is translated is the text a player reads - messages, menu titles, item names and lore - and that lives in its own file (see "messages.language" further down).

Keep reading

WORKING WITH THE REST OF THE SUITE

There is nothing to set up: ShadowOneBlock finds ShadowEssentials, ShadowPermissions, ShadowRegions and an economy plugin by itself when they are there, and works just the same when they are not. To see what it hooked into and what it did not, in game: /ob suite

UPDATING

On update your files are moved to the new version automatically: everything you changed is kept, new options arrive with their defaults. The files as they were before are in backup/<date>/, and if something needs your attention you will find PORTING-<version>.txt in this folder, saying what to fix by hand.

Where islands, members, upgrades and missions are stored

Out of the box: an H2 database inside plugins/ShadowOneBlock/data/. Nothing to install, nothing to configure, works straight away.

Keep reading

Move to MySQL (mysql.enabled: true) if you run a real server, if you want the backups to sit with those of your other plugins, or if several servers have to share the same islands. The database you name must already exist and the user must be allowed to create tables in it: the plugin does the rest.

storage5 keys
storage.mysql7 keys
enabledfalse
host"127.0.0.1"
port3306
database"shadowoneblock"
username"root"
password""
parameters"useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8"

Appended to the JDBC connection string.

storage.h21 key
auto-serverfalse

true = you can open the file with DBeaver while the server is running.

storage
fallback-to-localtrue

true = when MySQL is configured but does not answer, the plugin falls back to the local database instead of refusing to start. Set it to false only if you would rather have a failed start than islands saved in the wrong place.

table-prefix"sob_"

Prefix put in front of every table the plugin creates. Useful when the same database is shared with other plugins or services - including another island module of the suite pointed at the same MySQL.

storage.pool5 keys
maximum-pool-size10
minimum-idle2
connection-timeout-ms10000
idle-timeout-ms600000
max-lifetime-ms1800000

The block

What comes OUT of it - materials, mobs, chests, phases, the draft - lives in phases.yml, mutations.yml and infusions.yml, which is where you will spend your time. What is left here is the handful of settings about the block as a thing in the world: where a new island starts and how much room it gets.

oneblock5 keys
give-starter-itemstrue

true = the items listed in starter_chest.yml go straight into the inventory of whoever creates the island. There is no starter CHEST in a oneblock, because there is nowhere to stand one: the island is a single block hanging in the void. Set it to false for a server where players start with literally nothing.

starting-clearance3

How much empty space is cleared around the block when an island is created, in blocks. It matters in one case, but it is a case that happens: a grid slot handed to a new island before the clean-up of the previous one has finished, which without this would drop the new player inside somebody else's leftovers. 0 to 8.

biome-radius10

How far the phase's biome is painted around the block, in blocks. A biome is written one block at a time, so covering a whole island would mean hundreds of thousands of writes at every phase change - a server freeze everybody would notice. Around the block is also the only place it is really needed: it is what colours the sky and the water and decides which mobs the game itself will spawn. 0 switches biomes off entirely.

mob-cap-near-block12

The most living creatures allowed within 8 blocks of the block before it stops adding more. The block's mobs do NOT go through Minecraft's own population limit - that one covers natural spawning, while these are put there by the plugin - so without a ceiling a phase at full mob-chance, tripled by the Swarm mutation, turns an island into a crowd nobody is obliged to clear. It is a safety net, not a tuning knob: raise it only if you know your server can carry it.

starter-schematicfalse

true = when creating an island, players first pick a starting structure from island_schematics/ (needs WorldEdit or FastAsyncWorldEdit, and it is a Premium feature). Whatever the structure builds, the plugin then clears a pocket of air at the centre and puts the block there, so the structure can never bury it.

Keep reading

It ships OFF because starting from one block in the void IS the mode: a courtesy platform removes the first two hours of the game, which are the best ones. Turn it on for a server that would rather hand out a small themed outpost to build around.

island27 keys
starting-radius20

Starting radius of an island, in blocks from its centre.

spacing250

Distance between the centres of two islands side by side on the world grid. It has to be more than twice the largest radius reachable, or neighbouring islands could touch and their protections overlap.

height100

The height (Y) islands are generated at.

world-name"oneblock_world"

Name of the world given over to oneblock. Created if it is not there.

island.delete-cooldown3 keys

How long a player waits between deleting one island and the next, so nobody can create and delete on repeat (to farm the starter chest, for one). The first deletions are free: the wait starts from the "after-deletions"-th onwards.

enabledtrue
after-deletions2

From which deletion the wait kicks in (2 = the first is free, from the second onwards there is a wait).

seconds600
island.default-rules8 keys

What the rules of an island start as. Every owner can then change them for their own island from /ob settings -> Island Rules; until they do, the island follows what is written here - so changing a value here changes it for every island nobody has touched.

NOTE: these are not Minecraft gamerules. A gamerule covers a whole world and every island shares the same world, so the plugin applies these island by island by watching the events.

mob-griefingfalse

Mobs that break or change blocks: creepers, endermen, ghasts, sheep eating grass, villagers farming.

hostile-spawningtrue

Natural spawning of hostile mobs inside the island. Spawners, eggs and breeding stay allowed even with this off.

animal-spawningtrue

Natural spawning of animals and other passive mobs inside the island.

pvpfalse

Whether players can hit each other on the island.

fire-spreadfalse

Fire spreads and eats blocks.

tnt-damagefalse

Player explosions (TNT, beds in the Nether) break blocks.

leaf-decaytrue

Leaves cut off from a log decay on their own.

keep-inventoryfalse

Dying on your OWN island does not cost you your inventory. See "allow-keep-inventory-choice" below: whether the owner gets to choose it, or whether it stays locked to this value for everybody.

island
allow-keep-inventory-choicetrue

With false, the "keep-inventory" rule above is locked for the whole server: the button disappears from the Island Rules menu and only the default just written counts, ignoring whatever owners had saved before. With true (the default) every island turns it on and off for itself.

allow-sethometrue

With true, the owner - or a member holding SET_HOME - can move with /ob sethome the exact spot the island brings them back to: respawn after death, falling into the void under the island, coming back from a private portal and /ob home all point there instead of the island's centre. With false the command is off and the centre is always used.

clear-drops-on-home-teleporttrue

With true, every time a player is brought back to their island's home - death, a fall into the void, the way back from a private portal, /ob home - the plugin first clears every item lying on the ground of that island: no mess and no lag piling up over time. CAREFUL: it only touches items on the ground, never what is inside a chest or any other container, but it destroys them for good even when they were left there on purpose (a swap between members, say). Turn it off if you would rather tidy up by hand.

island.portals2 keys

The server's SHARED Nether and End - the real ones, belonging to the main world - are not this plugin's business: set them up yourself with Multiverse or another world plugin if you want them. By default a portal built on an island stays decorative: it lights up but takes nobody anywhere, which is deliberate now that each island has its own PRIVATE Nether and End (see below). A portal that does nothing beats players dropped into the shared Nether of an ordinary survival server.

allow-netherfalse

With true, a Nether portal lit on an island really does lead to the server's Nether (the one tied to the "island.world-name" world).

allow-endfalse

With true, an End portal or gateway lit on an island really does lead to the server's End.

island
private-nether-world-name"oneblock_world_nether"

When allow-nether/allow-end are false (the default), every island gets a small PRIVATE platform in the Nether and in the End instead, inside two void worlds shared by all the islands - not one world each, far too heavy. They are reached through a real portal lit on your own island (12 Ender eyes for the End, exactly as usual): the plugin builds both the platform and the way back, already lit. /ob end stays a direct shortcut, handy before a real End portal has been built.

private-end-world-name"oneblock_world_the_end"
private-platform-radius-nether2

Radius of the two private platforms (2 = 5x5, 4 = 9x9), each on its own.

private-platform-radius-end4
private-platform-material-nether"NETHERRACK"

Materials the private platform and portal are built from. Each has to be a valid Bukkit Material name ("NETHERRACK", "END_STONE", "OBSIDIAN"); a misspelt one is reported in the log and the default is used.

private-platform-material-end"END_STONE"
private-portal-frame-material"OBSIDIAN"
private-nether-schematic"PrivateNether.schem"

The name of a file inside plugins/WorldEdit/schematics/ (WorldEdit or FastAsyncWorldEdit needed) to paste in place of the plain flat platform, centred on X/Z over the centre of the private structure, its base at the right level, the FIRST time that island needs one. Leave it empty ("") for the classic flat platform, which is always available even without WorldEdit. In the Nether every non-air block pasted is recoloured using "private-nether-block-mix" below; in the End the schematic is left exactly as you made it, with no portal added by the plugin.

private-end-schematic"PrivateEnd.schematic"
private-nether-structure-radius15

A horizontal radius used ONLY to work out whether the schematic was already pasted once, since its real size is unknown until it is pasted the first time: it has to cover at least half the width of your structure. Ignored when no schematic is configured, where the flat platform's own radius is used instead.

private-end-structure-radius15
island.private-nether-block-mix6 keys

The mix of typical Nether blocks used to recolour the private Nether schematic after pasting. Every number is a relative weight rather than an exact percentage: the higher, the more common. Leave the section empty to keep the schematic's own blocks.

NETHERRACK70
BLACKSTONE10
BASALT8
SOUL_SAND6
SOUL_SOIL4
MAGMA_BLOCK2
island
private-nether-keep-inventorytrue

Dying in the private Nether or End does not cost the inventory. This is a server-wide switch, not a per-island one like "default-rules.keep-inventory" above, and it ships on because death in those two dimensions is nearly always a fall, not a risk the player chose to take.

private-end-keep-inventorytrue
void-catch-min-y40

Below this Y - in the main oneblock world, or on a private Nether/End platform - a falling player is put back at the home of THEIR island, or at spawn when they have none, instead of falling through the void forever. It does not cover the hub area, which has its own threshold in spawn.region.min-y.

leaderboard-size10

How many rows each /ob top leaderboard shows.

disable-thunderstormstrue

With true, no thunderstorms in the oneblock world. Weather in Minecraft belongs to a whole world rather than to one area, so this covers all of "world-name", islands included; but since every island still has its own PERSONAL weather (see island.default-rules above, shown to that player only), real lightning stays a nuisance worth switching off here.

spawn10 keys

Where a player is sent when they have no island to go back to - right after /ob delete confirm, for instance. CAREFUL: islands are laid out along the X axis starting at x=0.5 (slot 0) and only ever go positive (slot*spacing), so keeping "x" below negative guarantees this point never falls inside an island, present or future. When there is no block under it yet, the plugin builds a small platform itself on the first start (see ShadowOneBlockPlugin#ensureSpawnPlatform). Change these to send players to your real hub or lobby.

world"oneblock_world"
x-499.5

NOTE: to stand in the middle of block X=-500 the right value is -499.5, not -500.5 (a Location rounds down: -500.5 falls in block -501). Always check it this way when changing these numbers: you want block N, you write N + 0.5, never N - 0.5.

y133.0

The real floor of the Hub.schematic pasted here is at Y133 (checked block by block): below it there is a decorative solid mass down to Y105 and then a pocket of air, not a floor to stand on. 101 was wrong: a player put there floats in the void above that pocket, and the game "corrects" it by looking for solid ground, making them appear at Y133 as if teleported (a reported bug, fixed here).

z2.5
yaw0.0
pitch0.0
schematic"Hub.schematic"

The name of a file inside plugins/WorldEdit/schematics/ (WorldEdit or FastAsyncWorldEdit needed) pasted here automatically - centred on X/Z, its base at "y" - the FIRST time the block at these coordinates is still air. It is the same check used for the safety platform under spawn, which is indeed skipped when something is written here. Leave it empty ("") for the plain quartz platform. To change it or paste it again later, use /ob admin pasteschem rather than editing this value, which only counts on the first start.

platform-material"SMOOTH_QUARTZ"

Material and radius of the plain safety platform built under spawn when "schematic" above is empty. Ignored when it is set.

platform-radius4
spawn.region4 keys

The protected hub area: a rectangle centred on the x/z above, for the full height of the world. Inside it players can use what is already placed - furnaces, enchanting tables, levers - but not break it or place anything new, no mob spawns (hostile or peaceful), and ender pearls do not work. Anyone who drops below "min-y", by falling off the edge of the hub, is brought back here to spawn: it replaces the old invisible barrier blocks, with nothing left to place by hand in the world.

enabledtrue
radius-x60
radius-z60
min-y80

IMPORTANT: it has to sit BELOW the "y" above, the floor players walk on, or they are teleported at every step instead of only when they really fall out of the structure. The plugin never lets it go past "y - 1" anyway, as a safety net.

messages2 keys
language"en"

The language the plugin speaks to players in. It names a file inside plugins/ShadowOneBlock/lang/, so "en" reads lang/en.yml and "it" reads lang/it.yml: the plugin ships these two, English by default.

Keep reading

Only what a player reads is translated: chat messages, menu titles, item names and lore. Commands, config keys and comments stay English everywhere, so a guide, a macro or a support answer works whatever language a server runs in.

To add your own: copy lang/en.yml to lang/<code>.yml, translate the values - never the keys - and write that code here.

prefix"&b[ShadowOneBlock] &r"

Licence

ShadowOneBlock is a Premium plugin. With no valid key it does not start: the console says why at start-up, and /ob license is the only command that answers, so the key can be activated. Then restart the server.

Keep reading

The key does NOT go here. You activate it in game with

/ob license claim <purchase code>

and it ends up in license.yml, a separate file on purpose - so a support request that says "send me your config" does not arrive with your licence inside it. The "key" field below is only for people who would rather ship the same configuration to several servers.

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

grace-days7

Days of grace before the licence stops counting when a subscription has just run out or the address does not match - far more often a NAT or a proxy than a theft. 0-60.

activation-url""

Base address of the activation service. The plugin appends /claim and /check itself. Empty = manual activation with a key only.

resolve-public-iptrue

Asks the ShadowMC licence service which public address this server has: activation-url + /ip, or https://shadow-licences.riccardobotins.workers.dev/ip while activation-url is empty. It answers with the address it sees, and nothing about the server is sent. It is the only reliable way to know from behind a NAT, and it is what makes a licence sold for "play.example.net" work on a machine whose local addresses are all 10.x. false = never ask. Only when a licence is installed: a server without a key asks nobody.

server-ip""

The address this server is known by, when it differs from the ones it can see for itself. Only needed when a licence looks tied to another address despite being the right one.

bStats (anonymous usage statistics, https://bstats.org)

What is sent, every 30 minutes: how many servers run the plugin, the plugin version, the Minecraft/Paper version, the Java version, the operating system and core count, how many players are online (a number, nothing else), the edition of the licence in use and which economy moves the island money (ShadowEconomy, Vault or none). The server is identified only by a random serverUuid, generated once and stored in plugins/bStats/config.yml.

Keep reading

No player data leaves at all: no names, no UUIDs, no addresses, no coordinates. With no valid licence the plugin does not start, and nothing is sent either.

false here turns off only ShadowOneBlock. enabled: false in plugins/bStats/config.yml - the file shared by every plugin that uses bStats - turns them all off at once. Read at start-up: a change takes effect at the next restart.

metrics1 key
enabledtrue

economy.yml

The island economy
5 settings
plugins/ShadowOneBlock/economy.yml
File notes

Everything money-related in one file, kept out of config.yml so you do not have to hunt for it among unrelated settings.

ShadowOneBlock ships no economy of its own. Money features need an economy: ShadowEconomy, or Vault with an economy plugin. - ShadowEconomy is used directly whenever it is installed, with or

without Vault.

- Otherwise any economy plugin registered in Vault: EssentialsX, CMI

and the like (see the manual).

With neither, everything below (island bank, money costs and rewards of upgrades/missions/perks/mutations) switches itself off in the menus instead of throwing errors. /ob suite shows which economy was hooked.

currency''

The ShadowEconomy currency island money is counted in: bank, costs, rewards and the balance placeholders. Leave it empty ('') for ShadowEconomy's default currency. A name ShadowEconomy does not have falls back to the default one, with a warning in the console. Vault has a single currency, so with Vault this setting is ignored.

bank4 keys
starting-balance0

Starting balance of the shared bank when an island is created.

min-transaction0.01

Smallest and largest amount for a single deposit or withdrawal, both from /ob bank deposit|withdraw and from the bank menu.

max-transaction1000000
history-size200

How many movements the bank menu keeps available in its history (/ob bank -> History). Display only: every transaction is stored in the database for good either way.

generators.yml

Generators
5 settings
plugins/ShadowOneBlock/generators.yml
File notes

This file ships in English. Its Italian version is esempi/it/generators.yml, next to this one in the plugin folder, and the plugin never reads it: to run the Italian one, copy it over this file and use /ob admin reload. The messages and menus follow "messages.language" in config.yml on their own; this file is content you write, so it stays as it is.

The island ore generator.

When lava and water meet inside an island, the block that would normally be cobblestone is replaced with one drawn from this table. Every island has its own "prestige" level: the higher it is, the richer the table of materials. Prestige is bought from the generator menu (/ob generator) and counts for every member of the island.

The numbers under "materials" are WEIGHTS and do not have to add up to 100: they are normalised on their own. 50/30/20 and 5/3/2 give the same result. The menu always shows the real percentage it worked out.

How this table is meant to progress: each prestige takes 4 points off cobblestone, gives 2 to the ore the previous prestige unlocked, and lets the new ore in at 2%. The item cost of a prestige always asks for the ore of the prestige BEFORE it - never the one it is about to unlock - so you are never asked for an ore you have no way of getting yet.

enabledtrue
fallback-materialCOBBLESTONE

Used only when a prestige has no valid material (a config typo): this way the generator never stops working altogether.

prestiges9 keys
prestiges.02 keys
display-name"&7Basic"
prestiges.0.materials2 keys

Where every island starts: free, there is nothing to buy.

COBBLESTONE97
COAL_ORE3
8 more entries shaped like 0: 1, 2, 3, 4, 5, 6, 7, 8

infusions.yml

Infusions
16 settings
plugins/ShadowOneBlock/infusions.yml
File notes

This file ships in English. Its Italian version is esempi/it/infusions.yml, next to this one in the plugin folder, and the plugin never reads it: to run the Italian one, copy it over this file and use /ob admin reload. The messages and menus follow "messages.language" in config.yml on their own; this file is content you write, so it stays as it is.

ShadowOneBlock - infusions.yml

Telling the block what you need.

The problem this solves

In a oneblock a player decides nothing about what they get: they break, and they take what comes. Need obsidian while the phase gives netherrack? Keep breaking until the dice agree. It is the one moment where the mode stops being a game and becomes a wait - and it always lands exactly when the player has a plan in mind.

Keep reading

WHAT AN INFUSION IS

The island hands the block items of one AFFINITY, and for the next so many breaks the block produces what that affinity pushes far more often - INCLUDING things the current phase does not produce at all, because a material missing from the phase's table is not skipped, it is ADDED to it. Iron in the Nether, wood in the Underground. It is how a player tells the block what they need right now, and pays for it.

WHY IT IS NOT A DISCOUNT ON THE GAME

Three brakes, and they are the reason the system does not steal the mode from itself. It is paid in ITEMS, so it costs resources already earned; it lasts in BLOCKS BROKEN rather than in minutes, so it is worth the same to somebody playing alone and to an island of five; and there is a WAIT between one and the next, so nobody lives permanently infused.

Premium. Without a key the menu explains itself and does nothing.

enabledtrue

false = infusion is off server-wide. /ob infuse says so and stops there.

blocks-per-item6

How many breaks of duration each item handed over is worth.

max-blocks600

The ceiling on duration, however many items are handed over.

min-items8

Fewest items that will start an infusion at all. Below this the menu shows the affinity greyed out, with how many are missing.

max-items64

Most items taken in one go. Anything past this stays in the inventory: it is what stops somebody dumping a double chest of iron into one infusion.

cooldown-seconds300

The wait after an infusion ENDS before another can start, in seconds. 0 removes it. Counted from the end and not from the start, so a long infusion is not also a long wait.

bias-per-item0.08

How much strength each item adds. Strength is what multiplies the weight of a boosted material: at 1.0 a material already in the phase comes up twice as often, at 3.0 four times as often.

max-bias5.0

The ceiling on strength. Past it, more items only make the infusion last longer - which is deliberate: it turns "hand over everything you own" into a choice about duration rather than a way to break the loot table.

inject-weight-base4.0

The weight a material that the current phase does NOT have gets when it is added to the table. This one number is what makes infusion interesting rather than a small nudge, so it is worth understanding: the injected weight is this value times the infusion's strength. With 4.0 and a strength of 2.0 an absent material joins the table at weight 8 - a real presence next to the phase's own entries, without drowning them.

The affinities

accepts:  what the player may HAND OVER to start it
  boosts:   what the block is then more likely to PRODUCE, each with its
            own relative strength (1.0 = the affinity's full strength)
Keep reading

The two lists are separate on purpose, and that is where the design sits: it lets a player pay in ingots to get ORE, or pay in something a phase gives away freely to get something it never would.

affinities7 keys
affinities.iron5 keys
display-name"&f&lIron Affinity"
iconIRON_INGOT
lore["&7The block remembers the metal."]
accepts
[IRON_INGOT, IRON_NUGGET, RAW_IRON, IRON_BLOCK]+1
affinities.iron.boosts3 keys
IRON_ORE1.0
DEEPSLATE_IRON_ORE1.0
RAW_IRON_BLOCK0.4
6 more entries shaped like iron: gold, gems, wood, earth, nether, builder

island_levels.yml

Island levels
11 settings
plugins/ShadowOneBlock/island_levels.yml
File notes

Sets how an island's "level" is worked out. The level is shown on the scoreboard (%island_level%) and comes from the points an island collects.

Every time a member places one of the blocks listed below inside their own island, the island earns the points shown; breaking it takes them back (never below zero). Blocks that are not listed are worth 0 points, so they do not move the level at all. The level itself is simply:

level = island_points / points-per-level (rounded down)

NOTE: this is an incremental count - it follows what players place and break from the moment the feature is on - and not a full scan of the blocks already standing. An island built before this was switched on starts from zero and grows from there.

points-per-level100
blocks10 keys
DIRT1
COBBLESTONE1
STONE2
OAK_LOG3
OAK_PLANKS1
IRON_BLOCK25
GOLD_BLOCK50
DIAMOND_BLOCK200
EMERALD_BLOCK150
NETHERITE_BLOCK500

island_scoreboard.yml

The island scoreboard
5 settings
plugins/ShadowOneBlock/island_scoreboard.yml
File notes

The side panel with the island's statistics.

This one ships switched off, and that is on purpose

Minecraft gives a player one sidebar, and on this suite one plugin owns it: ShadowEssentials, everywhere - lobby, survival, minigames and islands. On an island it does not show lobby things: it draws its own "oneblock" board, and asks us for the level, the members, the radius and the bank. One sidebar, consistent across the server, and neither plugin fighting the other for it every tick.

This one is still worth having in two cases:

- ShadowEssentials is not installed (oneblock without the hub);
- you want it, different from the hub's, on the islands only.

For either: set "enabled: true" below and, if ShadowEssentials is there, "scoreboard.yield-to-oneblock: true" in its modules/tablist.yml. If the plugin spots a clash it cannot settle on its own it switches its own board off and writes in the console what to change: you will never find both of them on at once.

enabledfalse

The master switch for this scoreboard.

only-in-oneblock-worldtrue

Only read when "enabled" above is true. It says WHERE a board that shows shows, and a board that is off has nothing to place: with "enabled: false" this scoreboard appears nowhere, whatever is written here.

true  = only in the island world (island.world-name in config.yml)
false = in every world. Use it only once ShadowEssentials' own board is off,
        or the two overlap outside the oneblock world.
enabled-by-defaulttrue

What a player who has never chosen from /ob settings (or /ob scoreboard) sees the first time they join.

update-interval-ticks20
title"&b&lShadowOneBlock"

The lines, top to bottom (15 at most, Minecraft's own limit). They are text a player reads, so they are not written here: they come from the language file, in the server's language ("scoreboard.lines" in lang/<language>.yml, the one "messages.language" in config.yml picks). To draw your own board, write "lines:" in this file - yours win, in every language. The placeholder names stay English. For instance:

lines:
  - "&7"
  - "&f%player_name%"
  - "&7Money: &a%player_money%"
  - "&7"
  - "&fIsland: &b%island_name%"
  - "&7Level: &e%island_level%"

Player placeholders:

%player_name%        the name of whoever is looking at the board
%player_money%       their own money (needs an economy plugin)
%has_island%         yes/no in the server language (lang: scoreboard.has-island-yes/-no)

Rank placeholders, read through the suite (ShadowEssentials -> ShadowPermissions, LuckPerms or Vault). Empty when none is installed:

%rank_prefix%        the rank's prefix
%rank_suffix%        the rank's suffix
%rank_group%         the name of the main group

Island placeholders:

%island_name%        the island's name (built from its owner)
%island_owner%       the owner's name
%island_role%        the role of whoever is looking (lang: scoreboard.owner-role if theirs)
%island_level%       the island's level (see island_levels.yml)
%island_members%     members right now, owner included
%island_max_members% the member limit
%island_radius%      the island's protected radius, in blocks
%island_bank%        money in the island's shared bank

Oneblock placeholders:

%island_phase%          the name of the phase the island is in
%island_phase_number%   its position, counting from 1
%island_phase_total%    how many phases phases.yml holds
%island_phase_progress% "37/150", blocks broken out of blocks needed
%island_phase_percent%  the same as a number from 0 to 100
%island_blocks%         blocks the island has broken since it existed
%island_mutation%       the mutation riding along with this phase
%island_infusion%       the active infusion, with breaks left

A line whose placeholder does not apply - %island_level% for somebody with no island - is skipped on its own.

missions.yml

Missions
8 settings
plugins/ShadowOneBlock/missions.yml
File notes

This file ships in English. Its Italian version is esempi/it/missions.yml, next to this one in the plugin folder, and the plugin never reads it: to run the Italian one, copy it over this file and use /ob admin reload. The messages and menus follow "messages.language" in config.yml on their own; this file is content you write, so it stays as it is.

Missions shown in the "Missions" menu (reached from the control panel, /ob panel). Add, remove or change as many as you like: the menu adapts itself.

Every mission has:

display:   material/name/lore shown in the menu. Name and lore are text
           a player reads, written right here: this file ships in
           English (see the top of the file for the Italian one).
scope:     who carries the progress:
             PLAYER - every player has their own separate progress
             ISLAND - progress is shared by every member of the island
objective: what has to be done.
  type:    one of the many types available (full list below).
  material: optional - when present it filters for that block/item
            (type: BREAK_BLOCK + material: STONE = stone only).
            Left out, the event counts whatever the material is.
  custom-name: optional, ONLY for type: CUSTOM_ITEM_OBTAIN - asks for an
            item carrying this exact name (from any item plugin, Oraxen
            for instance) instead of any vanilla material.
  amount:  how many times it has to be done - or how much has to pile
            up, for the "cumulative" types listed below - to finish it.
rewards:   rewards handed out ONCE on completion. Every reward has a
           "type":
             MONEY   - { type: MONEY, amount: 500 }        (needs ShadowEconomy, or Vault with an economy plugin)
             COMMAND - { type: COMMAND, command: "..." }   (run from the console, %player% replaced)
             MESSAGE - { type: MESSAGE, text: "..." }
             ITEM    - { type: ITEM, material: DIAMOND, amount: 3 }

Objective types available (type):

BREAK_BLOCK, PLACE_BLOCK, PLANT_SEED, HARVEST_CROP, FISH_CATCH,
CRAFT_ITEM, SMELT_ITEM, ENCHANT_ITEM, TAME_ANIMAL, BREED_ANIMAL,
SHEAR_SHEEP, FILL_BUCKET, EMPTY_BUCKET, EAT_FOOD, KILL_MOB, KILL_PLAYER,
DIE, JUMP, SHOOT_ARROW, HIT_ARROW_TARGET, OPEN_CONTAINER, RIDE_ENTITY,
SLEEP_IN_BED, PURCHASE_UPGRADE, INVITE_MEMBER, CUSTOM_ITEM_OBTAIN
- "cumulative" (amount adds up the real value, not always +1):
DEAL_DAMAGE, TAKE_DAMAGE (damage points), WALK_DISTANCE, SWIM_DISTANCE,
ELYTRA_DISTANCE (blocks travelled), GAIN_EXPERIENCE (experience points),
LEVEL_UP (levels gained), DEPOSIT_BANK_MONEY (coins deposited)
missions5 keys
missions.break_stone_14 keys
missions.break_stone_1.display3 keys
materialSTONE
name"&fNovice Miner"
lore["&7Break &e100 &7stone blocks"]
missions.break_stone_1
scopeISLAND
missions.break_stone_1.objective3 keys
typeBREAK_BLOCK
materialSTONE
amount100
missions.break_stone_1
rewards
[{ type: MONEY, amount: 500 }, { type: MESSAGE, text: "&aMission complete: Novice Miner!" }]+1
4 more entries shaped like break_stone_1: place_dirt_1, fisherman_1, walker_1, gladiator_1

mutations.yml

Mutations
5 settings
plugins/ShadowOneBlock/mutations.yml
File notes

This file ships in English. Its Italian version is esempi/it/mutations.yml, next to this one in the plugin folder, and the plugin never reads it: to run the Italian one, copy it over this file and use /ob admin reload. The messages and menus follow "messages.language" in config.yml on their own; this file is content you write, so it stays as it is.

ShadowOneBlock - mutations.yml

The modifiers drawn together with a phase in the Phase Draft.

What a mutation is

A mutation rides along with a phase for as long as that phase lasts, on ONE island only. It is drawn when the draft offers a phase (see the "draft" section of phases.yml): the island does not vote on the phase and then on the modifier - it votes on the PAIR. That is what makes the choice a real one, because the richest phase can turn up carrying the worst mutation, and it is up to the island to decide what matters more right now.

Keep reading

HOW TO INVENT YOUR OWN

There is no list of mutation "types" to pick from, and nothing here needs the plugin recompiled. A mutation is any combination of the six numbers below; put two of them in the same entry and you have a mutation that did not exist. The neutral values - the ones that change nothing - are 1.0 for the multipliers and 0 for the rest, and a mutation simply leaves out what it does not touch.

drop-multiplier             how many times a broken block drops its loot.
                            2.0 = twice. Fractions work: 1.5 means every
                            other block drops twice, on average. Enchants
                            are respected - Fortune and Silk Touch apply
                            to the extra copies too.
rare-bias                   multiplies the weight of the phase's RARE
                            entries. "Rare" is worked out from the table
                            itself (anything under half its average
                            share), so it means the same thing whether
                            you wrote weights of 1..5 or of 100..500.
mob-chance-multiplier       multiplies how often a break spawns a mob.
                            0 switches mobs off for the phase entirely.
money-per-block             coins handed to whoever breaks the block.
                            Needs an economy plugin; ignored without one.
blocks-required-multiplier  multiplies how many blocks close the phase.
                            0.75 = a quarter shorter. Above 1 = longer.
haste-level                 Haste given to whoever is breaking, 1 to 4.
                            Renewed at every break, gone ten seconds
                            after they stop.

weight is the draw: relative to the other entries, not a percentage. A mutation with weight 0 never comes up - handy to park one you are writing without deleting it.

mutations9 keys
mutations.double-drops5 keys
display-name"&e&lDouble Loot"
iconHOPPER
weight20
lore
["&7Every block broken yields twice as much.", "&8Fortune and Silk Touch work on the copies too."]+1
mutations.double-drops.effects1 key
drop-multiplier2.0
8 more entries shaped like double-drops: rich-vein, swarm, quiet, fragile, golden, frenzy, hoarder, cursed

phases.yml

The block phases
40 settings
plugins/ShadowOneBlock/phases.yml
File notes

This file ships in English. Its Italian version is esempi/it/phases.yml, next to this one in the plugin folder, and the plugin never reads it: to run the Italian one, copy it over this file and use /ob admin reload. The messages and menus follow "messages.language" in config.yml on their own; this file is content you write, so it stays as it is.

ShadowOneBlock - phases.yml

The block. What comes out of it, and how the journey unfolds.

The one file that makes this plugin a oneblock

Every island owns exactly one block, at its centre. Break it and it comes back, rolled from the table of the phase the island is in. Break enough of them and the island moves on to the next phase, and the table changes. That is the whole mode; everything else in the plugin - protection, roles, upgrades, bank, missions, leaderboards - is the island engine around it.

ORDER IS THE ORDER OF THIS FILE

Phases are attempted top to bottom, exactly as written here. There is no "order" field to keep in sync. On disk an island stores the phase's ID, never its position, so inserting a new phase halfway down does NOT push every island on the server backwards - the one thing an index would have done, and the reason it is not used.

IF YOU EDIT A PHASE AN ISLAND IS ALREADY IN

It takes effect on the next block broken. Nothing is recalculated and no progress is lost. Deleting a phase an island is standing in is the only destructive edit: that island restarts from the first phase (it is that, or leaving it stuck on a name that no longer exists). /ob admin setphase puts it wherever you want without touching anything it has built.

A NOTE ON WEIGHTS

They are relative, not percentages: they do not have to add up to anything. 50 next to 5 means "ten times as often", whether the rest of the table sums to 100 or to 3000. Write whatever reads best to you.

enabledtrue

false = the block does not come back at all. Only useful while you are rewriting this file on a live server and would rather nobody advanced meanwhile.

fallback-materialCOBBLESTONE

Put down if a phase somehow ends up with no valid block at all. It should never happen; it exists so that a mistake leaves a broken table rather than a hole in the world.

loop-at-endtrue
true  = after the last phase the island starts again from the first one,
        keeping its total block count. Endless mode.
false = the island stays on the last phase for good. Its rewards are handed
        out once, at the moment it gets there, and never again.
action-bar-progresstrue

The progress bar over the hotbar, redrawn at every break. Off for a server that would rather keep the action bar for something else.

announce-phasetrue

Announce a new phase in chat to the island's online members.

regen-delay-ticks1

Ticks to wait before putting the block back. 1 is the tick straight after the break: the player standing on it drops a twentieth of a second, which is not visible. Raise it only to make breaking deliberately slower; 0 is not recommended (the break is still being applied on that tick, and the server would place a block into a spot it is about to clear).

The phase draft - one of the two things no other oneblock does

Without it, phases are a rail: everybody sees the same order, forever. With it, each time a phase ends the island is offered a few of the phases it could reach, each carrying a MUTATION rolled for it (mutations.yml), and the members VOTE on which one to live through.

Keep reading

Two islands that start together stop having the same run, and an island started over is not the same game twice. It is also the only place in the plugin where members have to agree on something, which is the point.

Premium. On the free version phases follow this file top to bottom, with no mutation - which is exactly how every other oneblock works.

draft7 keys
enabledtrue
candidates3

How many phases are put to the vote. 2 to 7 (they are the middle slots of the menu). Three is the sweet spot: enough of a choice to argue about, few enough to read at a glance.

seconds-to-vote60

How long the vote runs. It closes early on its own as soon as every ONLINE member has voted, so this is the wait for the ones who are away, not the wait for the ones who are playing.

owner-vote-weight2

How many votes the owner's counts for. 2 breaks a tie in a small island without letting them decide alone in a full one. 1 = everybody equal.

look-ahead3

How far down the list the draw may reach, starting from the phase that just ended. 1 would make the draft pointless (only one candidate, the next one); large numbers let an island leap deep into the file, which makes for a wilder server.

allow-repeatfalse

true = phases the island has already been through can come up again. Turn it on for an endless server where phases are places to revisit rather than steps to climb.

mutationstrue

false = the vote is on the phase alone, with no mutation attached.

The phases

Each one takes:

display-name    what players read, colour codes included
icon            the item shown in /ob phases
blocks-required how many blocks close the phase
biome           the biome painted around the block (optional)
blocks:         the weighted table the block is rolled from
mobs:           the weighted table of what may appear on top of it
mob-chance      0 to 1, how often a break also spawns a mob
chest-loot:     what fills a chest, when the table rolls one
rewards:        handed to every online member when the phase closes
Keep reading

Rewards use the same format as missions.yml and upgrades.yml:

- type: MONEY / ITEM / COMMAND / MESSAGE
phases8 keys
phases.plains9 keys
display-name"&a&lPlains"
iconGRASS_BLOCK
blocks-required150
biomePLAINS
phases.plains.blocks15 keys
GRASS_BLOCK40
DIRT30
OAK_LOG12
OAK_LEAVES10
COARSE_DIRT8
SAND6
COBBLESTONE6
STONE5
GRAVEL4
CLAY3
PUMPKIN2
HAY_BLOCK2
OAK_PLANKS2
CHEST1
COAL_ORE1
phases.plains.mobs5 keys
CHICKEN10
COW8
SHEEP8
PIG6
ZOMBIE3
phases.plains
mob-chance0.05
chest-loot
[{ material: OAK_SAPLING, amount: 2 }, { material: BONE_MEAL, amount: 8 }, { material: APPLE, amount: 3 }]+2
rewards
[{ type: MESSAGE, text: "&aThe plains are over: the block has stopped being kind." }, { type: MONEY, amount: 250 }]+1
7 more entries shaped like plains: underground, winter, ocean, jungle, nether, end, deep

player_upgrades.yml

Player upgrades
8 settings
plugins/ShadowOneBlock/player_upgrades.yml
File notes

This file ships in English. Its Italian version is esempi/it/player_upgrades.yml, next to this one in the plugin folder, and the plugin never reads it: to run the Italian one, copy it over this file and use /ob admin reload. The messages and menus follow "messages.language" in config.yml on their own; this file is content you write, so it stays as it is.

Personal perks (temporary boosts). Unlike island upgrades, these belong to the single player who bought them - or was given them - and the other members of the same island do NOT get them unless they buy or receive their own. You can buy one for yourself (cost-self), for every member of your island at once (cost-team, usually dearer), or gift one to a named player (same price as cost-self).

Every perk has:

display:           material/name/lore shown in the menu. Name and lore
                   are text a player reads, written right here: this
                   file ships in English (see the top of the file for
                   the Italian one).
effect:            a Minecraft PotionEffectType (JUMP_BOOST, SPEED,
                   HASTE, REGENERATION, FIRE_RESISTANCE, WATER_BREATHING,
                   NIGHT_VISION, SATURATION, LUCK, and so on)
amplifier:         the level of the effect (0 = level I, 1 = level II, ...)
duration-seconds:  how long it lasts (86400 = one day)
cost-self / cost-team: same format as upgrades.yml -> cost
perks4 keys
perks.jump_boost6 keys
perks.jump_boost.display3 keys
materialRABBIT_FOOT
name"&dJump Boost II"
lore["&7Jump higher for 2 days"]
perks.jump_boost
effectJUMP_BOOST
amplifier1
duration-seconds172800
perks.jump_boost.cost-self1 key
money2000
perks.jump_boost.cost-team1 key
money15000
3 more entries shaped like jump_boost: speed_boost, haste_boost, regeneration_boost

roles.yml

Island roles
7 settings
plugins/ShadowOneBlock/roles.yml
File notes

Roles you can give to island members. The island owner ALWAYS holds every permission, so there is no need (and no way) to list them here.

Every role has:

display-name: the name shown in menus and messages. It is text a player
               reads, so the roles below take theirs from the language
               file (roles.<role>.display-name in lang/<language>.yml),
               in the server's language. Write one here to use your own
               instead: it wins, in every language. A role you add
               yourself needs one, or it shows its id. Colour codes with
               "&" work (&e = yellow).
priority:      ordering in the menus only (higher = further up)
permissions:   what this role is allowed to do, out of:
  BREAK_BLOCKS      - break blocks
  PLACE_BLOCKS      - place blocks
  USE_BUCKET        - use buckets (water/lava/milk)
  USE_CONTAINERS    - open chests/barrels/furnaces/other containers
  USE_DOORS         - open doors/trapdoors/gates
  INTERACT_REDSTONE - use levers/buttons/pressure plates
  PVP               - hit other players on the island
  DAMAGE_ANIMALS    - hit animals/passive mobs on the island
  INTERACT_ENTITIES - interact with entities (villagers, panels...)
  INVITE_MEMBERS    - invite new members
  KICK_MEMBERS      - kick members out
  MANAGE_ROLES      - change another member's role
  MANAGE_UPGRADES   - buy and manage island upgrades
  MANAGE_SETTINGS   - change the island rules (mob griefing, spawning,
                       PvP, fire, time, weather...)
  SET_HOME          - move the island's teleport point
  DELETE_ISLAND     - delete the island

Add or remove roles freely: the roles menu shapes itself around whatever is in this file.

default-rolemember
roles3 keys
roles.co_owner2 keys
priority80
permissions
[BREAK_BLOCKS, PLACE_BLOCKS, USE_BUCKET, USE_CONTAINERS, USE_DOORS, INTERACT_REDSTONE, DAMAGE_ANIMALS, INTERACT_ENTITIES, INVITE_MEMBERS, KICK_MEMBERS, MANAGE_UPGRADES, MANAGE_SETTINGS, SET_HOME]+10
roles.member2 keys
priority50
permissions
[BREAK_BLOCKS, PLACE_BLOCKS, USE_BUCKET, USE_CONTAINERS, USE_DOORS, DAMAGE_ANIMALS, INTERACT_ENTITIES]+4
roles.visitor2 keys
priority0
permissions[ ]

starter_chest.yml

The starter chest
1 setting
plugins/ShadowOneBlock/starter_chest.yml
File notes

What a new island starts with.

In a oneblock there is no starter chest, because there is nowhere to put it: an island begins as ONE block hanging in the void, and a chest would need a second one to stand on. So these items go straight into the inventory of whoever creates the island. Anything that does not fit is dropped at their feet rather than lost.

Turn the whole thing off with "oneblock.give-starter-items: false" in config.yml, for a server that wants players to begin with nothing at all.

Every entry is a Minecraft material plus an amount.

items
[{ material: LAVA_BUCKET, amount: 1 }, { material: ICE, amount: 2 }, { material: BREAD, amount: 16 }, { material: WHEAT_SEEDS, amount: 4 }, { material: TORCH, amount: 8 }]+4

upgrades.yml

Island upgrades
24 settings
plugins/ShadowOneBlock/upgrades.yml
File notes

This file ships in English. Its Italian version is esempi/it/upgrades.yml, next to this one in the plugin folder, and the plugin never reads it: to run the Italian one, copy it over this file and use /ob admin reload. The messages and menus follow "messages.language" in config.yml on their own; this file is content you write, so it stays as it is.

Upgrades a player can buy from the "Upgrades" menu (reached from the control panel, /ob panel). Add, remove or change as many as you like, and give each one AS MANY LEVELS as you like: the menu adapts itself both to the number of upgrades and to the number of levels of each.

Every upgrade has:

display:  material/name/lore shown in the menu. Name and lore are text a
          player reads, written right here: this file ships in English
          (see the top of the file for the Italian one).
type:     what it does when it goes up a level. Possible values:
            RADIUS        - grows the island's protected radius by "amount" blocks
            MEMBER_LIMIT  - raises the member limit by "amount"
levels:   one entry per level (1, 2, 3, ...). Every level has:
  amount: what THAT level adds - not a hand-written running total: if
          level 1 gives +10 and level 2 gives +15, a player who reaches
          level 2 has been given +25 altogether
  cost:   what buying that level takes. "money" needs an economy:
          ShadowEconomy, or Vault with an economy plugin. "items" can
          also ask for a CUSTOM item (from any plugin, Oraxen for
          instance) by adding "custom-name" with the exact name shown
          on the item.
  rewards: EXTRA rewards handed out on reaching that level, on top of
           the effect itself. Same format as missions.yml.
There is no level "after the last one": once a player has bought the
highest level defined here, the upgrade reads as maxed out.
upgrades2 keys
upgrades.radius3 keys
upgrades.radius.display3 keys
materialGOLDEN_SHOVEL
name"&6Island Expansion"
lore
["&7Raises the protected radius", "&7of your island"]+1
upgrades.radius
typeRADIUS
upgrades.radius.levels3 keys
upgrades.radius.levels.13 keys
amount10
upgrades.radius.levels.1.cost1 key
money5000
upgrades.radius.levels.1
rewards[ ]
upgrades.radius.levels.23 keys
amount15
upgrades.radius.levels.2.cost1 key
money15000
upgrades.radius.levels.2
rewards[ ]
upgrades.radius.levels.33 keys
amount20
upgrades.radius.levels.3.cost2 keys
money40000
items[{ material: DIAMOND_BLOCK, amount: 5 }]
upgrades.radius.levels.3
rewards[{ type: MESSAGE, text: "&aIsland expanded to…]
upgrades.member_limit3 keys
upgrades.member_limit.display3 keys
materialPLAYER_HEAD
name"&bMore Members"
lore
["&7Raises the highest number", "&7of members of your island"]+1
upgrades.member_limit
typeMEMBER_LIMIT
upgrades.member_limit.levels2 keys
upgrades.member_limit.levels.13 keys
amount2
upgrades.member_limit.levels.1.cost1 key
money8000
upgrades.member_limit.levels.1
rewards[{ type: MESSAGE, text: "&aYou can now invite…]
upgrades.member_limit.levels.23 keys
amount2
upgrades.member_limit.levels.2.cost1 key
money20000
upgrades.member_limit.levels.2
rewards[ ]

Languages

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

lang/

Texts and messages
2 files
plugins/ShadowOneBlock/lang/
File notes

Every message a player reads, editable without touching the code.

The plugin's own language: English is the default, and lang/it.yml holds the Italian (set "messages.language: it" in config.yml to use it). Translating the plugin means copying this file and rewriting the values - never the keys.

Minecraft colour codes: & followed by a character (&a = green, &c = red).

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.yml reference — 560
lang/it.yml — 560

Most used placeholders

The plugin replaces them with the right value: leave them written as they are.

  • %value%
  • %player%
  • %name%
  • %level%
  • %plugin%
  • %phase%
  • %seconds%
  • %count%
  • %max%
  • <player>
  • %material%
  • %percent%
  • %total%
  • %blocks%

Message groups

  • island 22
  • general 8
  • command 22
  • help 2
  • bank 9
  • generator 4
  • upgrades 2
  • perks 6
  • portal 4
  • chat 1
  • suite 30
  • admin 169
  • oneblock 53
  • hub 1
  • license 54
  • locked 5
  • scoreboard 5
  • economy 2
  • menus 90
  • roles 3
  • gui 68

All the documentation