Configuration
ShadowOneBlock
One block, eight phases, and two things no other oneblock has.
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.
No setting found
Try another word, or search every plugin.
Settings
The files that decide how the plugin behaves. Start here.
config.yml
General settings 82 settings
config.ymlplugins/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 keysstorage.mysql7 keysenabledfalsehost"127.0.0.1"port3306database"shadowoneblock"username"root"password""parameters"useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8"Appended to the JDBC connection string.
storage.h21 keyauto-serverfalsetrue = you can open the file with DBeaver while the server is running.
storagefallback-to-localtruetrue = 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 keysmaximum-pool-size10minimum-idle2connection-timeout-ms10000idle-timeout-ms600000max-lifetime-ms1800000The 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 keysgive-starter-itemstruetrue = 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-clearance3How 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-radius10How 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-block12The 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-schematicfalsetrue = 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 keysstarting-radius20Starting radius of an island, in blocks from its centre.
spacing250Distance 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.
height100The 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 keysHow 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.
enabledtrueafter-deletions2From which deletion the wait kicks in (2 = the first is free, from the second onwards there is a wait).
seconds600island.default-rules8 keysWhat 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-griefingfalseMobs that break or change blocks: creepers, endermen, ghasts, sheep eating grass, villagers farming.
hostile-spawningtrueNatural spawning of hostile mobs inside the island. Spawners, eggs and breeding stay allowed even with this off.
animal-spawningtrueNatural spawning of animals and other passive mobs inside the island.
pvpfalseWhether players can hit each other on the island.
fire-spreadfalseFire spreads and eats blocks.
tnt-damagefalsePlayer explosions (TNT, beds in the Nether) break blocks.
leaf-decaytrueLeaves cut off from a log decay on their own.
keep-inventoryfalseDying 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.
islandallow-keep-inventory-choicetrueWith 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-sethometrueWith 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-teleporttrueWith 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 keysThe 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-netherfalseWith 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-endfalseWith true, an End portal or gateway lit on an island really does lead to the server's End.
islandprivate-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-nether2Radius of the two private platforms (2 = 5x5, 4 = 9x9), each on its own.
private-platform-radius-end4private-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-radius15A 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-radius15island.private-nether-block-mix6 keysThe 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.
NETHERRACK70BLACKSTONE10BASALT8SOUL_SAND6SOUL_SOIL4MAGMA_BLOCK2islandprivate-nether-keep-inventorytrueDying 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-inventorytruevoid-catch-min-y40Below 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-size10How many rows each /ob top leaderboard shows.
disable-thunderstormstrueWith 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 keysWhere 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.5NOTE: 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.0The 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.5yaw0.0pitch0.0schematic"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-radius4spawn.region4 keysThe 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.
enabledtrueradius-x60radius-z60min-y80IMPORTANT: 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 keyslanguage"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 keysTHE KEY LIVES IN license.yml (same folder as this file), or in the central plugins/ShadowControl/licenses.yml for the whole suite. The 'key' below is only a fallback for deploy systems that generate config.yml: leave it empty.
The key does NOT live here: it lives in license.yml, in this folder, written at first start (or in plugins/ShadowControl/licenses.yml for the whole suite).
grace-days7Days 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-iptrueAsks 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 keyenabledtrue economy.yml
The island economy 5 settings
economy.ymlplugins/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 keysstarting-balance0Starting balance of the shared bank when an island is created.
min-transaction0.01Smallest and largest amount for a single deposit or withdrawal, both from /ob bank deposit|withdraw and from the bank menu.
max-transaction1000000history-size200How 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
generators.ymlplugins/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.
enabledtruefallback-materialCOBBLESTONEUsed only when a prestige has no valid material (a config typo): this way the generator never stops working altogether.
prestiges9 keysprestiges.02 keysdisplay-name"&7Basic"prestiges.0.materials2 keysWhere every island starts: free, there is nothing to buy.
COBBLESTONE97COAL_ORE30:
1, 2, 3, 4, 5, 6, 7, 8 infusions.yml
Infusions 16 settings
infusions.ymlplugins/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.
enabledtruefalse = infusion is off server-wide. /ob infuse says so and stops there.
blocks-per-item6How many breaks of duration each item handed over is worth.
max-blocks600The ceiling on duration, however many items are handed over.
min-items8Fewest items that will start an infusion at all. Below this the menu shows the affinity greyed out, with how many are missing.
max-items64Most 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-seconds300The 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.08How 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.0The 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.0The 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 keysaffinities.iron5 keysdisplay-name"&f&lIron Affinity"iconIRON_INGOTlore["&7The block remembers the metal."]accepts[IRON_INGOT, IRON_NUGGET, RAW_IRON, IRON_BLOCK]+1
affinities.iron.boosts3 keysIRON_ORE1.0DEEPSLATE_IRON_ORE1.0RAW_IRON_BLOCK0.4iron:
gold, gems, wood, earth, nether, builder island_levels.yml
Island levels 11 settings
island_levels.ymlplugins/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-level100blocks10 keysDIRT1COBBLESTONE1STONE2OAK_LOG3OAK_PLANKS1IRON_BLOCK25GOLD_BLOCK50DIAMOND_BLOCK200EMERALD_BLOCK150NETHERITE_BLOCK500 island_scoreboard.yml
The island scoreboard 5 settings
island_scoreboard.ymlplugins/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.
enabledfalseThe master switch for this scoreboard.
only-in-oneblock-worldtrueOnly 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-defaulttrueWhat a player who has never chosen from /ob settings (or /ob scoreboard) sees the first time they join.
update-interval-ticks20title"&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
missions.ymlplugins/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 keysmissions.break_stone_14 keysmissions.break_stone_1.display3 keysmaterialSTONEname"&fNovice Miner"lore["&7Break &e100 &7stone blocks"]missions.break_stone_1scopeISLANDmissions.break_stone_1.objective3 keystypeBREAK_BLOCKmaterialSTONEamount100missions.break_stone_1rewards[{ type: MONEY, amount: 500 }, { type: MESSAGE, text: "&aMission complete: Novice Miner!" }]+1
break_stone_1:
place_dirt_1, fisherman_1, walker_1, gladiator_1 mutations.yml
Mutations 5 settings
mutations.ymlplugins/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 keysmutations.double-drops5 keysdisplay-name"&e&lDouble Loot"iconHOPPERweight20lore["&7Every block broken yields twice as much.", "&8Fortune and Silk Touch work on the copies too."]+1
mutations.double-drops.effects1 keydrop-multiplier2.0double-drops:
rich-vein, swarm, quiet, fragile, golden, frenzy, hoarder, cursed phases.yml
The block phases 40 settings
phases.ymlplugins/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.
enabledtruefalse = 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-materialCOBBLESTONEPut 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-endtruetrue = 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-progresstrueThe progress bar over the hotbar, redrawn at every break. Off for a server that would rather keep the action bar for something else.
announce-phasetrueAnnounce a new phase in chat to the island's online members.
regen-delay-ticks1Ticks 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 keysenabledtruecandidates3How 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-vote60How 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-weight2How 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-ahead3How 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-repeatfalsetrue = 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.
mutationstruefalse = 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 keysphases.plains9 keysdisplay-name"&a&lPlains"iconGRASS_BLOCKblocks-required150biomePLAINSphases.plains.blocks15 keysGRASS_BLOCK40DIRT30OAK_LOG12OAK_LEAVES10COARSE_DIRT8SAND6COBBLESTONE6STONE5GRAVEL4CLAY3PUMPKIN2HAY_BLOCK2OAK_PLANKS2CHEST1COAL_ORE1phases.plains.mobs5 keysCHICKEN10COW8SHEEP8PIG6ZOMBIE3phases.plainsmob-chance0.05chest-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
plains:
underground, winter, ocean, jungle, nether, end, deep player_upgrades.yml
Player upgrades 8 settings
player_upgrades.ymlplugins/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 -> costperks4 keysperks.jump_boost6 keysperks.jump_boost.display3 keysmaterialRABBIT_FOOTname"&dJump Boost II"lore["&7Jump higher for 2 days"]perks.jump_boosteffectJUMP_BOOSTamplifier1duration-seconds172800perks.jump_boost.cost-self1 keymoney2000perks.jump_boost.cost-team1 keymoney15000jump_boost:
speed_boost, haste_boost, regeneration_boost roles.yml
Island roles 7 settings
roles.ymlplugins/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 islandAdd or remove roles freely: the roles menu shapes itself around whatever is in this file.
default-rolememberroles3 keysroles.co_owner2 keyspriority80permissions[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 keyspriority50permissions[BREAK_BLOCKS, PLACE_BLOCKS, USE_BUCKET, USE_CONTAINERS, USE_DOORS, DAMAGE_ANIMALS, INTERACT_ENTITIES]+4
roles.visitor2 keyspriority0permissions[ ] starter_chest.yml
The starter chest 1 setting
starter_chest.ymlplugins/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
upgrades.ymlplugins/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 keysupgrades.radius3 keysupgrades.radius.display3 keysmaterialGOLDEN_SHOVELname"&6Island Expansion"lore["&7Raises the protected radius", "&7of your island"]+1
upgrades.radiustypeRADIUSupgrades.radius.levels3 keysupgrades.radius.levels.13 keysamount10upgrades.radius.levels.1.cost1 keymoney5000upgrades.radius.levels.1rewards[ ]upgrades.radius.levels.23 keysamount15upgrades.radius.levels.2.cost1 keymoney15000upgrades.radius.levels.2rewards[ ]upgrades.radius.levels.33 keysamount20upgrades.radius.levels.3.cost2 keysmoney40000items[{ material: DIAMOND_BLOCK, amount: 5 }]upgrades.radius.levels.3rewards[{ type: MESSAGE, text: "&aIsland expanded to…]upgrades.member_limit3 keysupgrades.member_limit.display3 keysmaterialPLAYER_HEADname"&bMore Members"lore["&7Raises the highest number", "&7of members of your island"]+1
upgrades.member_limittypeMEMBER_LIMITupgrades.member_limit.levels2 keysupgrades.member_limit.levels.13 keysamount2upgrades.member_limit.levels.1.cost1 keymoney8000upgrades.member_limit.levels.1rewards[{ type: MESSAGE, text: "&aYou can now invite…]upgrades.member_limit.levels.23 keysamount2upgrades.member_limit.levels.2.cost1 keymoney20000upgrades.member_limit.levels.2rewards[ ]Languages
The texts the plugin shows to players, one file per language.
lang/
Texts and messages 2 files
lang/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.
| File | Language | Texts |
|---|---|---|
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
island22general8command22help2bank9generator4upgrades2perks6portal4chat1suite30admin169oneblock53hub1license54locked5scoreboard5economy2menus90roles3gui68