Skip to content
ShadowMC

Configuration

ShadowCrazyChest

Chests that collect, sell and pay by themselves, plus crates and keys.

Free with Premium v1.0.4

Where the files are

plugins/ShadowCrazyChest/

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

Applying changes

/scc reload

Reloads the files without restarting the server.

What’s inside

6 files · 462 settings

Start with: config.yml

Settings

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

config.yml

General settings
59 settings
plugins/ShadowCrazyChest/config.yml
File notes

Only the behaviour of the plugin lives here. The texts are in lang/, the chest types in chesttypes.yml, the prices in prices.yml and the crates in crates.yml: every file has one job.

Almost everything applies with /scc reload. The exceptions are read once at startup: the whole storage section except flush-interval and log-retention-days (database, prefix, debug.log-sql) and integrations.placeholderapi.

config-version4

The version of this file.

Leave it as it is: the plugin sets it. On update your files (this one, prices.yml, chesttypes.yml, crates.yml and lang/) are moved to the new version automatically: every value you changed or added stays, the new options arrive with their comments, and what you deleted stays deleted. The old copies are in backup/<date>/, and if something needs your attention you will find PORTING-<version>.txt in the plugin folder.

prefix'&8[&5&lShadow&d&lChest&8] &7'

The fallback prefix, used only when a language file has none of its own. The real one is the "prefix" key inside lang/<language>.yml.

Languages

language2 keys
defaulten

The language of the server. A lang/<default>.yml file must exist. Two of them ship with the plugin: en and it. Set "it" here for an Italian server.

per-playertrue
true  -> every player sees the messages in the language of their
         client, if a file for that language exists.
false -> everybody sees the language above.

Either way an explicit choice by a player (/scc lang) always wins, and is remembered in the database.

Database

Straight after copying it in, the plugin creates an H2 database of its own inside plugins/ShadowCrazyChest/data/: there is nothing to install and nothing to configure.

Keep reading

To move to MySQL, set enabled: true and the credentials: the plugin creates the tables itself, with the same schema. If the MySQL server does not answer at startup, with fallback-to-local the server starts anyway on the local file instead of refusing to.

storage9 keys
storage.mysql7 keys
enabledfalse
host127.0.0.1
port3306
databaseshadowcrazychest
usernameroot
password""
parameters"useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8"
storage
table-prefix"scc_"

The table prefix. Change it and the plugin creates new tables and starts from scratch: handy for two servers on the same database.

fallback-to-localtrue

MySQL configured but out of reach: with true the plugin says so in the console and falls back to the local file, so the server still starts.

flush-interval"30s"

How often modified chests are written to the database. They are also written on shutdown and with /scc save, so this only decides how much a sudden crash could cost you.

log-salestrue

Records every sale in the history table (the "earned today" statistics need it). On a server with hundreds of SellChests the table grows fast: the cleanup below keeps it under control.

log-retention-days30
import-legacy-yamltrue

Imports the data of the old YAML version once (the instances/ and enderchests/ folders). The files are not deleted, only renamed.

storage.h21 key
auto-serverfalse

Lets more than one process open the same H2 file. Only needed if you want to inspect the database with an external tool while the server is running.

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

Economy

economy4 keys
enabledtrue

false switches off everything to do with money: the chests keep collecting and piling up, but they do not pay and do not charge.

providerAUTO
AUTO   -> ShadowEconomy if present, else Vault, else nothing
SHADOW -> ShadowEconomy only
VAULT  -> Vault only
NONE   -> no economy
extra-currencies[ ]

The named currencies the server uses, besides the default one. They are here so the editor can offer them and so you can write them as "currency:<id>" in crate rewards or in sell.payout of a chest type. The one that really creates them is ShadowEconomy: this only lists the names. Example: [tokens, gems]

price-sourceAUTO

Where the sale price of an item comes from.

AUTO   -> first the prices of the single chest type, then the server
          shop through ShadowEconomy, then prices.yml. This is the right
          choice nearly always: the server prices stay a single set, and
          you do not have to keep two lists in step.
SHADOW -> the prices of the ShadowEconomy shop only
LOCAL  -> chesttypes.yml and prices.yml only, ignoring the shop

Integrations

All optional: if the plugin is not there, the matching feature simply does not switch on. Set false to ignore one even when the plugin is installed.

integrations6 keys
shadow-economytrue

money and shop prices

shadow-regionstrue

build permission for placing chests

shadow-skyblocktrue

islands: limits and collector for members

shadow-essentialstrue

announcement to the suite hub

worldguardtrue

region protection, if ShadowRegions is absent

placeholderapitrue

%shadowchest_...% placeholders

Custom items and tokens are recognised on their own, with nothing to switch on here: the plugin only has to be installed.

Items:  Oraxen, Nexo, ItemsAdder, MMOItems, Slimefun,
        ExecutableItems, EcoItems, MythicMobs, HeadDatabase
Tokens: TokenManager, BeastTokens, TokenEnchant, PlayerPoints

Anywhere an item can be written, its id will do:

custom-item: 'oraxen:ruby'      custom-item: 'itemsadder:iron_dust'
custom-item: 'mmoitems:SWORD:CUTLASS'   custom-item: 'head:<base64>'

/scc status shows what really got hooked.

Limits and protections

limits5 keys
max-placed-per-player-1

Total chests a player may place, adding up every type. -1 = no global limit (only the per-type ones count). It can be raised per rank with shadowcrazychest.limit.total.<number>.

blacklisted-worlds[world_the_end]

Worlds where chests cannot be placed.

require-build-permissiontrue

true = a chest is only placed where the player may build according to ShadowRegions / WorldGuard / ShadowSkyBlock.

collect-only-from-memberstrue

true = a SellChest only collects what the owner and their island mates break. With false it collects everything that happens within its radius, whoever does it: on a server with islands or claims that is the quickest way to have the neighbour steal your work.

protect-custom-itemstrue

true = a SellChest never sells nor destroys an item from Oraxen, ItemsAdder or the like, unless that exact id has a price written in prices.yml. Without this, void mode would make somebody's custom sword disappear after it ended up in there by mistake.

Holograms

The text of the lines lives in the language files, under "hologram". A hologram is one entity seen by everybody, so it speaks the default language of the server.

hologram5 keys
enabledtrue
providerAUTO

Who draws them.

AUTO                 -> ShadowEssentials, then DecentHolograms, then
                        HolographicDisplays, then the internal one
SHADOW_ESSENTIALS    -> forces the hologram module of the suite
DECENT_HOLOGRAMS     -> forces DecentHolograms
HOLOGRAPHIC_DISPLAYS -> forces HolographicDisplays
INTERNAL             -> always the internal one (TextDisplay, no
                        dependencies at all)
Keep reading

AUTO is the right choice nearly always: if the server already has something that draws holograms, the chest lines take on its settings instead of looking like they were drawn by another plugin.

With ShadowEssentials the chest holograms stay ours all the same: they do not end up in modules/hologram.yml, they do not show up as editable with /hologram, and they are removed on their own if this plugin gets disabled.

update-interval"2s"

How often the numbers refresh (earnings, fill level, timers).

height1.15

Height above the block.

view-range1.0

View distance, as a multiplier. Applies to the internal one.

Licence

license3 keys

The plugin works without a key too: that is the FREE version, with the limits you can see with /scc license. With a valid key it becomes the full version in the same instant, without a restart.

Keep reading

The key does NOT go here, it goes in license.yml: a config doing the rounds in a support channel must not carry somebody's licence with it. The field below exists only for whoever generates configs from a template and wants everything in a single file.

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

activation-url'https://shadow-licences.riccardobotins.workers.dev'

The BASE address of the activation service: the plugin appends /claim and /check itself. It is what makes it possible to write

Keep reading
/scc license claim <purchase-code>

and get the licence in a second, without emailing anybody.

Empty means fully offline verification: the key is pasted by hand and the plugin talks to nobody. That is the shipped value because an address written here before the service exists would be a call that fails at every startup, on every installed server.

grace-days7

How many days of grace before falling back to free when something does not add up: a subscription that just expired (the renewal has nearly always gone through already) or an address that does not match (far more often a NAT or a proxy than a thief).

resolve-public-iptrue

Asks the licence service (activation-url + /ip) what public address this server has: it answers with the address it sees, and nothing about the server is sent. Needed behind NAT, where the server sees none of its own public addresses and a licence tied to the domain would not be recognised. Switch it off and the plugin only uses the addresses it sees from the inside. Only when a licence is installed: a server without a key asks nobody. false = never ask.

Sounds

Put "none" to remove a sound. The names are the Bukkit ones.

sounds7 keys
gui-clickUI_BUTTON_CLICK
crate-open-startBLOCK_CHEST_OPEN
crate-open-winENTITY_PLAYER_LEVELUP
crate-open-win-rareENTITY_ENDER_DRAGON_GROWL
chest-upgradeENTITY_PLAYER_LEVELUP
chest-sellENTITY_EXPERIENCE_ORB_PICKUP
errorENTITY_VILLAGER_NO

Diagnostics

debug1 key
log-sqlfalse

Prints every query in the console. Useful to work out a problem, very noisy in production.

Boosters

boosters1 key
enabledtrue

false = booster items do nothing, the booster button leaves every panel and /scc booster and /scc givebooster refuse. Nothing else changes. A single type can also opt out with "boosters: false" in chesttypes.yml.

Crate keys

keys2 keys
force-materialTRIPWIRE_HOOK

Every crate key is made of this item, whatever crates.yml says for that crate (its name, lore and model stay its own): one look, one meaning. Empty = each crate uses the material written in crates.yml.

auto-closetrue

Close the opening screen by itself once the reward has been handed out.

Shadowhopper

hopper1 key

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

What is sent, every 30 minutes: a random server id (serverUuid, not derived from anything), the plugin version, the Minecraft/Paper and Java versions, the operating system and core count, the online mode, how many players are online (a number only) and which edition runs here (free/premium/creator). NO player data: no names, no UUIDs, no addresses, no coordinates.

Keep reading

false switches off this plugin only. enabled: false in plugins/bStats/config.yml switches off every bStats plugin on this server at once.

metrics1 key
enabledtrue

chesttypes.yml

Chest types
206 settings
plugins/ShadowCrazyChest/chesttypes.yml
File notes

The five chest types the plugin ships with. They are already tuned for a public server: leave them as they are, change them, rename them or delete the lot. A /scc reload applies whatever you do.

None of them lives in the code: adding a new one is copying a block and changing its id.

TYPE ORDER

The free version of the plugin uses the first two types in this file. That gives it SellChest and UnitChest, the two a small server actually needs. Prefer a different two? Move them to the top: the order counts, not the name.

FIVE STORAGE MODES

SELL       The centrepiece. It collects on its own whatever is mined
           or dropped in its radius and sells it at a fixed
           interval, even while the owner is offline. Filters, a
           "void" mode for junk, instant selling.
INVENTORY  A genuinely big chest, split into pages of 54 slots. It
           takes any item, NBT included.
UNIT       One material only, with a counter instead of slots:
           enormous capacity at no cost in memory, but no NBT (an
           enchanted or named item will not fit).

ENDERCHEST Storage shared per owner: two blocks of the same type, in

two different bases, show the same inventory.
HOPPER     The ShadowHopper: sucks up, filters and ships to a linked
           container (see the last type of this file).

THE BLOCK

block-material is the actual block that gets placed. A container (BARREL recommended) lets hoppers push items into the chest; a BARRIER does not, but it lets you use a custom 3D model by turning on the "display" section.

The barrel is recommended over the chest because two barrels side by side stay two separate blocks, while two chests join into a double chest and would share one inventory.

PER-MATERIAL RULES

On top of the filters, every selling chest has a rule per material: SELL, KEEP or VOID. They are not written here - they are set in game, from the chest panel, because they are the owner's choice and not the server's. With no rule written, automatic applies: whatever has a price is sold, whatever has none is kept, and nothing is destroyed until somebody asks for it.

LEVELS

Every line of "levels" is one level, and the multipliers are absolute against level 0, not cumulative: reading the line tells you straight away what that level is worth. What has an effect depends on the mode:

sell-multiplier      every mode that sells
interval-multiplier  SELL and HOPPER (works in whole seconds: a
                     1s interval cannot get shorter)
bonus-radius         SELL: rings of chunks; HOPPER: blocks
bonus-filters        HOPPER only (more filter columns)

Chests with pages (INVENTORY, ENDERCHEST) unlock one more page per level: that is the only thing a level does there.

TEXTURES AND 3D MODELS

With display.enabled: true a model appears above the block, and you can define it in three ways, in order of priority:

custom-item: 'oraxen:sell_chest'    an item from another plugin,
                                    taken as it is (Oraxen, Nexo,
                                    ItemsAdder, MMOItems, Slimefun,
                                    MythicMobs, HeadDatabase...)
item-model: 'myserver:sellchest'    the item_model component of
                                    your resource pack (1.21.4+)
custom-model-data: 100001           the old CustomModelData

You will find it written in every type but switched off, because it needs a resource pack that is not here: turn it on when your pack is ready and the numbers are already in place.

All of these can be set from the game as well with /scc editor, by holding the item and clicking.

REAL CHESTS

block-material is CHEST for the chests: the block looks like what it is. Two real chests side by side would join into a double chest, so the plugin keeps its own single, and refuses a plain chest placed against one of them.

PER CHUNK, BOOSTERS, LEVELS

max-per-chunk: how many of this type may stand in one chunk (0 = no limit). Raised per rank with shadowcrazychest.limit.chunk.<type>.<n>, and the permission always wins over the number written here.

boosters: false = booster items do nothing on this type and the booster button leaves its panel (config.yml boosters.enabled switches them off everywhere at once).

levels: [] = no upgrades at all: the level button disappears and the hologram, the item and the panel stop mentioning a level. For the chests with pages (INVENTORY, ENDERCHEST) every level opens one more page: they start with one and unlock the rest one by one.

THE SHADOWHOPPER

The hopper pulls items from a radius in BLOCKS (sell.collect-radius, grown by bonus-radius per level, never above sell.max-collect-radius) and from sell.collect-height blocks above itself. Its panel has filter columns - an item, a chest, whitelist or blacklist, on or off - the first filters.base of them open, bonus-filters more per level, never more than filters.max. "perks" are bought once per hopper: autosmelt cooks what is caught, compact packs items into the storage block a column asks for. Each can be switched off or priced in money or xp.

types5 keys

Sellchest

The chest that pays. It collects the drops of its own chunk, keeps them in a real storage and every twenty seconds sells everything sellable, paying the owner even while they are offline.

Three each out of the box: enough to cover a farm, a mine and the base, not enough to fill the world with barrels.

types.sellchest17 keys
display-name'&5&lSellChest'
block-materialCHEST
storage-modeSELL
permission''

Permission needed to place it. Empty = everybody.

max-placed-per-player3
max-per-chunk1
boosterstrue
rows6

The storage: 6 rows of 9 slots, a single page.

container-pages1
types.sellchest.display8 keys
enabledfalse
materialBARREL
custom-model-data100001

custom-item: 'oraxen:sell_chest' item-model: 'myserver:sellchest'

scale1.0
offset-y0.0

raises or lowers the model against the block

rotation-y0.0

degrees of rotation around the vertical axis

billboardFIXED

FIXED, VERTICAL, HORIZONTAL, CENTER

glowtrue
types.sellchest.sell16 keys
interval20s

How often it empties and sells what is inside. Twenty seconds is the right compromise: you watch the money come in while mining, and it is not frequent enough to scroll the chat with notifications.

auto-selltrue
void-unsellablefalse

Destroys what nobody buys instead of leaving it inside. Off on purpose: it is a deletion all the same, and on this chest the player expects to be able to get back what they mined. Each owner can still switch it on for a single chest from its panel.

chunk-collectortrue

The collector: drops within the radius go into the chest instead of falling on the ground.

collect-block-dropstrue
collect-mob-dropstrue
collect-ground-itemstrue

Also what is already on the ground: the stuff dropped by hand, what pops out of a furnace, what another plugin makes appear. Whoever throws it is still checked like whoever mines, so the chest takes what YOU throw and not what somebody else tosses over to a friend.

collect-radius-chunks0

0 = the chest chunk only. Every unit adds one ring of chunks around it (4 at most).

instant-sellfalse

true = the drop turns into money without ever entering the storage.

sell-offlinetrue

Keeps selling while the owner is offline, but at 75%. Whoever plays earns more than whoever leaves the server running, which is exactly the incentive you want.

offline-multiplier0.75
notify-ownertrue

Tells the owner in the action bar on every automatic sale.

give-experiencetrue
payoutmoney

What this chest pays in:

money            the default currency
currency:gems    a named ShadowEconomy currency
xp / xp-levels   experience (only while the owner is online)
tokens           the token plugin of the server
max-items-per-cycle2000

How many items it handles at most in one cycle. 0 = no cap. This is the valve that keeps the server standing under an industrial farm: what is left over is not lost, it stays inside and goes to the next cycle.

daily-earnings-cap0.0

How much this chest may earn in a day. 0 = no cap. Off out of the box because it is a balance choice of the single server. Once the cap is reached the chest STOPS SELLING instead of selling without paying: the goods stay inside and tomorrow they really are sold. The tally survives a restart.

types.sellchest
levels
[{ cost: 7500, sell-multiplier: 1.1, interval-multiplier: 0.9 }, { cost: 25000, sell-multiplier: 1.25, interval-multiplier: 0.8 }, { cost: 75000, sell-multiplier: 1.45, interval-multiplier: 0.7 }, { cost: 200000, sell-m …+4

Five levels: it sells more and it sells more often. At maximum a SellChest is worth double and works at double the speed, which makes it a real goal without breaking the economy.

Prices that apply to this type only. A material not listed here follows economy.price-source (server shop or prices.yml).

Particles and animation

If ShadowEssentials with its particle module is on the server, a name written here is asked of it first: that way the particles of this plugin are the same ones as everything else on the server. If it does not know the name, or if ShadowEssentials is not there, the vanilla particle with that name is used.

Keep reading

The running loop costs something every tick and only whoever turns it on pays for it: with enabled: false on every type, the task does not even look at the chest list. And even switched on, it only draws around the chests somebody actually has in front of them.

types.sellchest.effects7 keys
enabledtrue
types.sellchest.effects.idle4 keys

The ring turning around the block: the only thing visible from far away, and what tells you that barrel is not a barrel.

particlehappy_villager
count4
spread0.0
speed0.0
types.sellchest.effects
idle-radius0.7
types.sellchest.effects.sell7 keys

The flash for when it sells: the moment the owner earns.

particletotem_of_undying
count10
spread0.35
speed0.08
soundentity_experience_orb_pickup
volume0.4
pitch1.6
types.sellchest.effects.collect4 keys

The hit for when the collector eats a drop: it explains why what you mined did not fall on the ground.

particlecrit
count5
spread0.25
speed0.1
types.sellchest.effects
spinfalse

The 3D model spins on itself. Only matters with display.enabled.

spin-degrees-per-second30.0
types.sellchest
material-prices{ }
custom-item-prices{ }

Prices by custom item id, again for this type only. The ids go in quotes because they contain a colon.

'oraxen:ruby': 300.0
whitelist[ ]

The starting filters of every new chest of this type. Each chest then has its own, editable from the panel: two SellChests of the same player nearly always serve two different farms.

blacklist[SPAWNER, BEDROCK]

A spawner taken with silk touch is worth more than any automatic sale: it had better not end up in a chest by mistake.

Unitchest

One item only, as many as you like. Inside there are no slots but a counter, and that is why a million cobblestone blocks fit in one block instead of two hundred chests.

Keep reading

It adopts the first material it receives and from then on keeps only that. Emptied completely it becomes free again and accepts another: there is no button to look for.

It opens with a right click and has a single window, with the item in the middle: left click takes one, shift a stack, right click fills the inventory.

Breaking it, what was inside goes back to the inventory. If it does not all fit the chest does NOT break: better two trips than a million items on the ground.

types.unitchest14 keys
display-name'&6&lUnitChest'
block-materialCHEST
storage-modeUNIT
permission''
max-placed-per-player5
max-per-chunk0
boostersfalse
types.unitchest.display8 keys
enabledfalse
materialBARREL
custom-model-data100002

item-model: 'myserver:unitchest'

scale1.0
offset-y0.0
rotation-y0.0
billboardFIXED
glowfalse
types.unitchest
levels[ ]

No levels: there is nothing to grow. The capacity is already unlimited and this chest does not sell.

types.unitchest.effects6 keys
enabledtrue
types.unitchest.effects.idle4 keys
particleenchant
count3
spread0.0
speed0.0
types.unitchest.effects
idle-radius0.7
types.unitchest.effects.collect4 keys
particlecrit
count3
spread0.2
speed0.08
types.unitchest.effects
spinfalse
spin-degrees-per-second30.0
types.unitchest
material-prices{ }
custom-item-prices{ }
whitelist[ ]
blacklist[SPAWNER, BEDROCK]

What a hopper must not be able to push into it. An item with enchantments or a name does not go in anyway: in a counter it would lose everything that makes it different.

Megachest

Six pages of fifty-four slots: three hundred and twenty-four slots in a single block, and it takes anything - enchanted items, heads, potions, stuff from other plugins.

It has no levels because they would have nothing to grow: the size of an inventory is what it is. Being big from the start is exactly what it is worth.

types.megachest16 keys
display-name'&b&lMegaChest'
block-materialCHEST
storage-modeINVENTORY
permission''
max-placed-per-player2
max-per-chunk1
boostersfalse
rows6
container-pages6
types.megachest.display8 keys
enabledfalse
materialCHEST
custom-model-data100003

item-model: 'myserver:megachest'

scale1.0
offset-y0.0
rotation-y0.0
billboardFIXED
glowfalse
types.megachest
levels
[{ cost: 15000 }, { cost: 40000 }, { cost: 90000 }, { cost: 180000 }, { cost: 350000 }]+3

One page open at the start, one more per level: five levels for six pages.

types.megachest.effects3 keys

Off: a MegaChest is a storeroom, and twenty storerooms in one base all glowing together are noise. Turn them on if you want a display piece.

enabledfalse
types.megachest.effects.idle2 keys
particleend_rod
count3
types.megachest.effects
idle-radius0.7
types.megachest
material-prices{ }
custom-item-prices{ }
whitelist[ ]
blacklist[ ]

Big enderchest

Storage tied to the owner and not to the block: three pages of fifty-four slots, the same ones from any chest of this type they own, in any base, in any world.

This is the chest to sell with ranks: one block at spawn and one at the base save half an hour of travelling.

types.enderchest16 keys
display-name'&d&lBig EnderChest'
block-materialENDER_CHEST
storage-modeENDERCHEST
permission''
max-placed-per-player3
max-per-chunk0
boostersfalse
rows6
container-pages3
types.enderchest.display8 keys
enabledfalse
materialENDER_CHEST
custom-model-data100004

item-model: 'myserver:bigenderchest'

scale1.15
offset-y0.0
rotation-y0.0
billboardFIXED
glowtrue
types.enderchest
levels[{ cost: 50000 }, { cost: 150000 }]

One page open at the start, one more per level: two levels for three pages.

types.enderchest.effects5 keys
enabledtrue
types.enderchest.effects.idle4 keys
particleportal
count6
spread0.0
speed0.0
types.enderchest.effects
idle-radius0.8
spinfalse
spin-degrees-per-second20.0
types.enderchest
material-prices{ }
custom-item-prices{ }
whitelist[ ]
blacklist[ ]

Shadowhopper

The hopper you buy. It is a real hopper - the block exists, vanilla hoppers push into it, the one below keeps pulling - with three things more:

Keep reading
SUCKS UP   the items dropped on the ground within its radius, instead of
           waiting for them to fall exactly into the hole.
FILTERS    with the chest's whitelist and blacklist: what
           does not pass stays out and falls as always.
SHIPS      to a linked container, which can be a thousand
           blocks away and can in turn be a
           plugin chest - a UnitChest, for instance.

The link is chosen by pointing: right click the hopper, "linked container" button, then right click the container. No coordinates to type in.

Levels do two things you feel at once: they ship more per round and widen the suction radius.

types.hopper19 keys
display-name'&e&lShadowHopper'
block-materialHOPPER
storage-modeHOPPER
permission''
max-placed-per-player8
max-per-chunk0
boostersfalse
types.hopper.filters2 keys

Filter columns of the panel: the first "base" are open, more come with the levels.

base7
max35
types.hopper.perks2 keys

Bought once per hopper, from its panel. currency: money | xp (experience levels).

types.hopper.perks.autosmelt3 keys
enabledtrue
cost25000
currencymoney
types.hopper.perks.compact3 keys
enabledtrue
cost25000
currencymoney
types.hopper
rows1

The pass-through storage: one row only, because what comes in must leave again, not pile up.

container-pages1
types.hopper.display8 keys
enabledfalse
materialHOPPER
custom-model-data100005

item-model: 'myserver:shadowhopper'

scale1.0
offset-y0.0
rotation-y0.0
billboardFIXED
glowfalse
types.hopper.sell19 keys
interval1s

How often it sucks up and ships. One second is the rhythm of a hopper: slower would show, faster would be pointless.

auto-sellfalse

By default it does not sell: it is a hopper, not a chest. Turning it on, what it collects becomes money instead of leaving.

void-unsellablefalse
chunk-collectortrue
collect-block-dropstrue
collect-mob-dropstrue
collect-ground-itemstrue

This is the suction, and it is the reason it exists.

collect-radius-chunks0

0 = one block around. Every ring adds sixteen blocks of radius, and that is what the levels raise.

collect-radius3

The hopper's own pull, in BLOCKS: this at level 0, +bonus-radius per level, never above max-collect-radius. And how high above itself it looks.

max-collect-radius7
collect-height3
instant-sellfalse
sell-offlinetrue
offline-multiplier1.0
notify-ownerfalse
give-experiencefalse
payoutmoney
max-items-per-cycle2000
daily-earnings-cap0.0
types.hopper
levels
[{ cost: 10000, interval-multiplier: 0.8, bonus-radius: 1, bonus-filters: 7 }, { cost: 35000, interval-multiplier: 0.6, bonus-radius: 1, bonus-filters: 7 }, { cost: 90000, interval-multiplier: 0.4, bonus-radius: 1, bonu …+3

Four levels: it ships more and sucks up from further away. bonus-radius in blocks, bonus-filters in columns: 3 -> 7 blocks and 7 -> 35 columns over four levels.

types.hopper.effects6 keys
enabledtrue
types.hopper.effects.idle4 keys
particleelectric_spark
count2
spread0.0
speed0.0
types.hopper.effects
idle-radius0.6
types.hopper.effects.collect4 keys
particlecrit
count3
spread0.2
speed0.08
types.hopper.effects
spinfalse
spin-degrees-per-second20.0
types.hopper
material-prices{ }
custom-item-prices{ }
whitelist[ ]

Empty = everything passes. Writing materials in it, the hopper sucks up ONLY those: that is how you put a hopper under a mixed farm and take away one thing only.

blacklist[SPAWNER, BEDROCK]

What it must never touch.

crates.yml

Crates
101 settings
plugins/ShadowCrazyChest/crates.yml
File notes

Five ready-made crates, balanced against each other: Basic, Vote, Daily, Magic and Epic. Use them as they are, change their rewards, or throw them away and write your own.

IN ITALIAN: the same five crates, with Italian names and descriptions, are in esempi/it_IT/crates.yml inside this plugin's folder. Copy that file over this one to use it: the plugin never reads it on its own.

TO PUT ONE IN THE WORLD, three commands:

/crate setblock basic     look at a block and register it
/key give <name> basic 3  hand out three keys
/crate list               check they are all there

From then on a right click on the station opens it, and a left click (or shift) shows the preview with the real percentages.

CRATE ORDER

The free version of the plugin uses the first two crates in this file, and they are in this order on purpose: Basic and Vote are the ones a small server needs. Want a different two? Move them to the top: the order counts, not the name.

KEYS come in two shapes, and the plugin treats them as one thing: the physical item (/key givephysical) that can be traded and given away, and the virtual key (/key give) that survives death and can be granted to offline players. Opening spends the one in hand first.

ODDS are written as "weight", meaning how much a reward weighs against the others. They do not have to add up to 100: the plugin works out the percentage itself and shows it in the preview, so there is nothing to keep up to date by hand. They do add up to 100 in every crate below anyway, so while you edit them a weight reads straight off as a percentage.

A SINGLE REWARD can hand out items, money and commands together: "a sword, a thousand coins and the VIP rank" is one prize.

ANIMATIONS: CSGO (a strip that slows down), ROULETTE (a grid that flashes), CYCLE (a single slot), INSTANT (the prize right away).

THE IN-GAME EDITOR

Everything in this file can be done with /crate editor instead, without writing anything: create crates, add rewards by holding the item, set weights with a slider and watch the percentages update. Whatever you change still ends up in here.

Items added by the editor are written as serialised ItemStacks (lines with "==:"), because that is the only format that keeps NBT and enchantments. Rewards written by hand below keep working right next to them.

CUSTOM ITEMS

Anywhere an item can be written - key, preview, icon, reward - an id from another plugin will do:

custom-item: 'oraxen:ruby'
custom-item: 'itemsadder:iron_dust'
custom-item: 'mmoitems:SWORD:CUTLASS'
head: '<base64 value>'             head with a texture
item-model: 'myserver:key'         item_model component

WHAT A REWARD CAN GIVE

items:      the actual objects
commands:   commands run from the console
money:      money in the default currency
xp:         experience points
xp-levels:  experience levels
tokens:     tokens (TokenManager, BeastTokens, ... or a currency
            of ShadowEconomy named "tokens")
payouts:    the long form for named currencies, for example
              payouts:
                'currency:gems': 5

One reward can hand out all of them at once.

Every command written below belongs to ShadowCrazyChest, so they work on any server with nothing else installed. To give away a rank, add the command of your permissions plugin, for example

commands:
  - 'lp user %player% parent addtemp vip 7d'
crates5 keys

Basic crate

The one that gets opened often: small prizes, nothing rare, there to give a reason to keep playing. This is the crate for the spawn, and the one to hand out on first join.

crates.basic10 keys
display-name'&a&lBasic Crate'
permission''
open-styleMENU

Where the opening happens:

MENU   the classic one: a window opens and the strip scrolls inside it.
       Precise, readable, fine with twenty people standing around.
WORLD  the Hypixel way: nothing opens, the lid lifts and the prize
       appears in mid-air above the block among the particles. Everyone
       else sees it too, which is exactly why it exists.
Keep reading

WORLD needs a station: opened through /crate open, with no block in front of it, even a WORLD crate falls back to the window.

animationCSGO
duration4s
broadcast-raretrue
rewards-per-open1

The lines shown above the station. Empty or missing = the ones from the language file (hologram.crate). %crate% becomes the name of the crate.

Example:
  hologram:
    - '&a&l%crate%'
    - '&7Right click to open'
crates.basic.key4 keys
materialTRIPWIRE_HOOK
name'&a&lBasic Key'
lore
["&7Opens the &a&lBasic Crate&7.", "", "&8▸ &7Right click the station", "&8▸ &7Left click for the preview"]+2
glowtrue
crates.basic.preview-item3 keys
materialCHEST
name'&a&lBasic Crate'
lore
["&7The everyday crate.", "&7Materials, coins and now and then", "&7something you did not see coming."]+2
crates.basic
rewards
[{ id: iron, weight: 25, display: {…} }, { id: gold, weight: 20, display: {…} }, { id: coins, weight: 18, money: 3000, xp: 150, display: {…} }, { id: supplies, weight: 12, display: {…} }, { id: diamonds, weight: 10, dis …+7

Vote crate

The reward for voting: quick to open, always useful, now and then a better key. Let your voting plugin hand it out with

/key give %player% vote 1
crates.vote10 keys
display-name'&e&lVote Crate'
permission''
open-styleMENU

Where the opening happens:

MENU   the classic one: a window opens and the strip scrolls inside it.
       Precise, readable, fine with twenty people standing around.
WORLD  the Hypixel way: nothing opens, the lid lifts and the prize
       appears in mid-air above the block among the particles. Everyone
       else sees it too, which is exactly why it exists.
Keep reading

WORLD needs a station: opened through /crate open, with no block in front of it, even a WORLD crate falls back to the window.

animationCYCLE
duration3s
broadcast-rarefalse
rewards-per-open1

The lines shown above the station. Empty or missing = the ones from the language file (hologram.crate). %crate% becomes the name of the crate.

Example:
  hologram:
    - '&a&l%crate%'
    - '&7Right click to open'
crates.vote.key4 keys
materialTRIPWIRE_HOOK
name'&e&lVote Key'
lore
["&7Earned by voting for the server.", "&7Thank you: it matters more than it looks.", "", "&8▸ &7Right click the station"]+3
glowtrue
crates.vote.preview-item3 keys
materialPAPER
name'&e&lVote Crate'
lore
["&7One vote, one key.", "&7Vote every day to get more."]+1
crates.vote
rewards
[{ id: vote_coins, weight: 30, money: 5000, display: {…} }, { id: vote_iron, weight: 22, display: {…} }, { id: experience, weight: 15, xp-levels: 10, display: {…} }, { id: basic_key, weight: 12, commands: […], display: …+7

Daily crate

The daily reward. More generous than the Basic because it is opened once a day: hand it out from a scheduled command or from your reward plugin with

/key give %player% daily 1
crates.daily10 keys
display-name'&b&lDaily Crate'
permission''
open-styleMENU

Where the opening happens:

MENU   the classic one: a window opens and the strip scrolls inside it.
       Precise, readable, fine with twenty people standing around.
WORLD  the Hypixel way: nothing opens, the lid lifts and the prize
       appears in mid-air above the block among the particles. Everyone
       else sees it too, which is exactly why it exists.
Keep reading

WORLD needs a station: opened through /crate open, with no block in front of it, even a WORLD crate falls back to the window.

animationCSGO
duration4s
broadcast-raretrue
rewards-per-open1

The lines shown above the station. Empty or missing = the ones from the language file (hologram.crate). %crate% becomes the name of the crate.

Example:
  hologram:
    - '&a&l%crate%'
    - '&7Right click to open'
crates.daily.key4 keys
materialTRIPWIRE_HOOK
name'&b&lDaily Key'
lore
["&7Today's reward.", "&7Come back tomorrow for the next one.", "", "&8▸ &7Right click the station"]+3
glowtrue
crates.daily.preview-item3 keys
materialBARREL
name'&b&lDaily Crate'
lore
["&7One a day, every day.", "&7More generous than the Basic."]+1
crates.daily
rewards
[{ id: daily_coins, weight: 25, money: 8000, display: {…} }, { id: daily_food, weight: 20, items: […], display: {…} }, { id: daily_experience, weight: 15, xp: 750, display: {…} }, { id: daily_gold, weight: 12, display: …+8

Magic crate

The high step: real gear, upgrades and the first chests of the plugin. This is the one to sell in the server shop.

crates.magic11 keys
display-name'&d&lMagic Crate'
permission''
open-styleWORLD

Where the opening happens:

MENU   the classic one: a window opens and the strip scrolls inside it.
       Precise, readable, fine with twenty people standing around.
WORLD  the Hypixel way: nothing opens, the lid lifts and the prize
       appears in mid-air above the block among the particles. Everyone
       else sees it too, which is exactly why it exists.
Keep reading

WORLD needs a station: opened through /crate open, with no block in front of it, even a WORLD crate falls back to the window.

crates.magic.world4 keys

How the opening looks in the world. Only used with open-style: WORLD.

height1.4

How far above the block the spinning item appears, and how big it is.

scale0.85
crates.magic.world.particle4 keys

The particles rising while it spins.

particleend_rod
count6
spread0.02
speed0.01
crates.magic.world.finish-particle7 keys

The flash for when it stops on the prize.

particletotem_of_undying
count60
spread0.5
speed0.35
soundentity_player_levelup
volume0.9
pitch1.2
crates.magic
animationROULETTE
duration5s
broadcast-raretrue
rewards-per-open1

The lines shown above the station. Empty or missing = the ones from the language file (hologram.crate). %crate% becomes the name of the crate.

Example:
  hologram:
    - '&a&l%crate%'
    - '&7Right click to open'
crates.magic.key4 keys
materialTRIPWIRE_HOOK
name'&d&lMagic Key'
lore
["&7Opens the &d&lMagic Crate&7.", "&7No consolation prizes in here.", "", "&8▸ &7Right click the station", "&8▸ &7Left click for the preview"]+4
glowtrue
crates.magic.preview-item3 keys
materialENDER_CHEST
name'&d&lMagic Crate'
lore
["&7Gear, upgrades", "&7and the plugin's chests."]+1
crates.magic
rewards
[{ id: magic_coins, weight: 25, money: 30000, display: {…} }, { id: magic_diamonds, weight: 20, display: {…} }, { id: magic_netherite_scrap, weight: 15, display: {…} }, { id: magic_booster, weight: 12, commands: […], di …+8

Epic crate

The last one. Every prize in here is something worth talking about in chat, which is why broadcast-rare is on: when one drops, the whole server hears about it.

crates.epic11 keys
display-name'&6&lEpic Crate'
permission''
open-styleWORLD

Where the opening happens:

MENU   the classic one: a window opens and the strip scrolls inside it.
       Precise, readable, fine with twenty people standing around.
WORLD  the Hypixel way: nothing opens, the lid lifts and the prize
       appears in mid-air above the block among the particles. Everyone
       else sees it too, which is exactly why it exists.
Keep reading

WORLD needs a station: opened through /crate open, with no block in front of it, even a WORLD crate falls back to the window.

crates.epic.world4 keys

How the opening looks in the world. Only used with open-style: WORLD.

height1.4

How far above the block the spinning item appears, and how big it is.

scale0.85
crates.epic.world.particle4 keys

The particles rising while it spins.

particlefirework
count6
spread0.02
speed0.01
crates.epic.world.finish-particle7 keys

The flash for when it stops on the prize.

particletotem_of_undying
count60
spread0.5
speed0.35
soundui_toast_challenge_complete
volume0.9
pitch1.2
crates.epic
animationROULETTE
duration6s
broadcast-raretrue
rewards-per-open1

The lines shown above the station. Empty or missing = the ones from the language file (hologram.crate). %crate% becomes the name of the crate.

Example:
  hologram:
    - '&a&l%crate%'
    - '&7Right click to open'
crates.epic.key4 keys
materialTRIPWIRE_HOOK
name'&6&lEpic Key'
lore
["&7Opens the &6&lEpic Crate&7.", "&7Nothing comes out of here that is not worth it.", "", "&8▸ &7Right click the station", "&8▸ &7Left click for the preview"]+4
glowtrue
crates.epic.preview-item3 keys
materialBEACON
name'&6&lEpic Crate'
lore
["&7Netherite, big chests", "&7and front-page stuff."]+1
crates.epic
rewards
[{ id: epic_coins, weight: 25, money: 150000, display: {…} }, { id: epic_netherite, weight: 20, display: {…} }, { id: epic_megachest, weight: 15, rare: true, commands: […], display: {…} }, { id: epic_booster, weight: 12 …+8

prices.yml

Prices
96 settings
plugins/ShadowCrazyChest/prices.yml
File notes

The fallback prices and the permission multipliers.

If ShadowEconomy with a configured shop is on the server, these prices only cover the materials the shop does not buy: with economy.price-source: AUTO the plugin asks the shop first, so the server prices stay a single set and there are not two lists to keep in step by hand.

A material that appears nowhere at all is not sellable: the chests collect it but do not turn it into money.

Permission multipliers

Evaluated in the order they are written: the first permission the player holds wins, so the higher ranks go on top.

The generation multipliers only apply while the owner is online (a permission cannot be checked offline). For what a chest earns while selling with the owner offline, sell.offline-multiplier of the type applies instead, in chesttypes.yml.

generation-multipliers
[{ permission: shadowcrazychest.multiplier.mvp, multiplier: 3 }, { permission: shadowcrazychest.multiplier.vip_plus, multiplier: 2 }, { permission: shadowcrazychest.multiplier.vip, multiplier: 1.5 }]+2
sell-multipliers
[{ permission: shadowcrazychest.multiplier.mvp, multiplier: 1.5 }, { permission: shadowcrazychest.multiplier.vip_plus, multiplier: 1.25 }, { permission: shadowcrazychest.multiplier.vip, multiplier: 1.1 }]+2

Custom item prices

Items from Oraxen, ItemsAdder, Nexo, MMOItems and the like are priced by id, not by material: ten custom items can all share the same base material and be worth completely different amounts.

Keep reading

A custom item that does not appear here is not sold and, with limits.protect-custom-items on, is not destroyed by void mode either.

The keys go in quotes because they contain a colon.

custom-item-prices{ }

'oraxen:ruby': 250.0 'itemsadder:iron_dust': 12.0 'mmoitems:MATERIAL:MITHRIL': 500.0

Sale prices (per single item)

material-prices93 keys

ores and ingots

material-prices
COAL1.5
CHARCOAL1.0
RAW_COPPER1.0
COPPER_INGOT1.5
RAW_IRON3.0
IRON_INGOT4.0
RAW_GOLD5.0
GOLD_INGOT6.5
REDSTONE0.5
LAPIS_LAZULI0.5
QUARTZ1.5
AMETHYST_SHARD2.0
DIAMOND40.0
EMERALD20.0
NETHERITE_SCRAP150.0
ANCIENT_DEBRIS200.0

compressed blocks: worth the nine items they hold

material-prices
COAL_BLOCK13.5
COPPER_BLOCK13.5
IRON_BLOCK36.0
GOLD_BLOCK58.5
REDSTONE_BLOCK4.5
LAPIS_BLOCK4.5
DIAMOND_BLOCK360.0
EMERALD_BLOCK180.0

stone and what comes from it

material-prices
COBBLESTONE0.1
STONE0.15
DEEPSLATE0.15
COBBLED_DEEPSLATE0.1
ANDESITE0.1
DIORITE0.1
GRANITE0.1
TUFF0.1
CALCITE0.3
NETHERRACK0.05
BASALT0.2
BLACKSTONE0.3
OBSIDIAN5.0
END_STONE0.5

dirt, sand, wood

material-prices
DIRT0.05
GRAVEL0.1
SAND0.1
RED_SAND0.15
CLAY_BALL0.3
OAK_LOG0.6
SPRUCE_LOG0.6
BIRCH_LOG0.6
JUNGLE_LOG0.6
ACACIA_LOG0.6
DARK_OAK_LOG0.6
CHERRY_LOG0.8
MANGROVE_LOG0.6
PALE_OAK_LOG0.8

farming

material-prices
WHEAT0.4
CARROT0.4
POTATO0.4
BEETROOT0.4
SUGAR_CANE0.3
BAMBOO0.1
MELON_SLICE0.2
PUMPKIN0.6
NETHER_WART1.0
COCOA_BEANS0.5
KELP0.1
CACTUS0.3

mob drops

material-prices
ROTTEN_FLESH0.2
BONE0.8
STRING0.6
SPIDER_EYE0.8
GUNPOWDER1.5
ENDER_PEARL8.0
BLAZE_ROD10.0
GHAST_TEAR15.0
SLIME_BALL1.5
MAGMA_CREAM3.0
PHANTOM_MEMBRANE6.0
SHULKER_SHELL40.0
NETHER_STAR500.0
LEATHER1.0
FEATHER0.4
PORKCHOP0.8
BEEF0.8
CHICKEN0.6
MUTTON0.6
RABBIT_HIDE0.8
INK_SAC0.5
GLOW_INK_SAC2.0
PRISMARINE_SHARD1.5
PRISMARINE_CRYSTALS2.5
NAUTILUS_SHELL25.0
HEART_OF_THE_SEA200.0
TRIDENT250.0
ECHO_SHARD60.0
SCULK0.5

Languages

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

lang/

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

The version of this language file. Missing keys are read from the copy inside the jar, so an old file breaks nothing: this number is only here to let you know there are new ones to translate.

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

Most used placeholders

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

  • %crate%
  • %value%
  • %type%
  • %amount%
  • %level%
  • %player%
  • <crate>
  • %material%
  • <player>
  • %count%
  • %total%
  • %items%
  • %multiplier%
  • %id%

Message groups

  • prefix 1
  • general 9
  • usage 15
  • help 5
  • chest 50
  • sell 4
  • crate 22
  • key 12
  • booster 3
  • top 3
  • stats 4
  • lang 5
  • status 17
  • types 8
  • admin 3
  • editor 18
  • item 11
  • disposition 4
  • hologram 12
  • gui 363
  • license 68

All the documentation