Skip to content

Commands and Permissions

EmakiStorage's main command is /emakistorage, aliased to /estorage. Examples in the docs use /estorage.

Running it with no arguments opens your own warehouse and requires emakistorage.use (emakistorage.admin also passes). Admin subcommands all require emakistorage.admin; reload and debug have their own dedicated permissions which emakistorage.admin can also replace.

Command List

CommandPermissionDescription
/estorageemakistorage.useOpens your own warehouse. Players only.
/estorage helpNo extra checkShows help.
/estorage open <player>emakistorage.adminOpens a target player's warehouse as an admin. The sender must be a player.
/estorage slot grant <player> <amount>emakistorage.adminAdjusts the target's granted slot pool. A negative amount reclaims slots.
/estorage stacklimit player <player> <limit>emakistorage.adminSets the target's player-level per-slot ceiling.
/estorage stacklimit slot <player> <slot> <limit>emakistorage.adminSets the entry-level ceiling of one logical slot.
/estorage info <player>emakistorage.adminPrints the capacity breakdown, page count, stackLimit, sort mode and total amount.
/estorage export <player>emakistorage.adminExports the warehouse as readable YAML into exports/export-<uuid>.yml.
/estorage reloademakistorage.reload or emakistorage.adminReloads config, language and GUI templates, then reports the loaded template count.
/estorage debug ...emakistorage.debug or emakistorage.adminManages debug modules. Available modules are storage and chat_input; subcommands come from CoreLib's DebugCommand.

Examples

text
/estorage
/estorage help
/estorage open Steve
/estorage slot grant Steve 10
/estorage slot grant Steve -5
/estorage stacklimit player Steve 100000
/estorage stacklimit player Steve max
/estorage stacklimit player Steve 10k
/estorage stacklimit slot Steve 3 5000
/estorage info Steve
/estorage export Steve
/estorage reload
/estorage debug storage on

Argument Formats

ArgumentAccepted inputNotes
<amount> (slot grant)Decimal integer, may be negativeNegative values reclaim granted slots.
<limit> (stacklimit)Decimal number, compact units (k m b t p e), maxmax resolves to Long.MAX_VALUE. Overflow and values <= 0 are rejected outright rather than truncated, so a mistyped figure never silently becomes a different ceiling. This means 0 cannot be entered through commands; restore inheritance through the API or an action instead.
<slot>Logical slot index (0-based)When that slot holds no entry the command reports "slot empty" and no entry is created.

Write Operations Require the Target Online

slot grant and stacklimit are refused outright when the target is offline, reporting command.target_offline. The reason is that these operations mutate the in-memory storage object: writing directly into an unloaded save would race the player's next login and could overwrite or discard the change.

For online targets the write is dispatched to that player's own region thread, not the caller's. If the target's storage is still loading, the command reports general.data_loading; retry shortly.

Read-only commands do not share this restriction: info and export use the snapshot read path, which loads from disk when necessary, so they work for offline players too. open <player> also works for offline targets.

Permission Nodes

PermissionDefaultScope
emakistorage.usetrueOpening your own warehouse.
emakistorage.unlock.purchasetrueUsing paid expansion in the GUI. Also requires unlock.purchase_enabled: true.
emakistorage.reloadopUsing /estorage reload. Can be replaced by emakistorage.admin.
emakistorage.debugopUsing /estorage debug .... Can be replaced by emakistorage.admin.
emakistorage.adminopUsing open, slot, stacklimit, info and export, and replacing the dedicated reload/debug permissions.

Numeric Tier Permissions

The following two permissions are numeric tiers. They are not declared in paper-plugin.yml; simply grant the node with a numeric suffix.

Permission prefixEffectResolution rule
emakistorage.slots.<n>Adds n slotsScans every effective permission and takes the highest numeric suffix. Tiers do not stack.
emakistorage.stacklimit.<n>Provides a player-level per-slot ceiling of nAlso takes the highest value.

Neither supports wildcards: a node such as emakistorage.slots.* is skipped. Some permission plugins expand a wildcard into "holds every n", which would silently push the player to the maximum tier, so the implementation only accepts a purely numeric suffix and ignores suffixes containing . or non-digits.

Common LuckPerms examples:

text
/lp group default permission set emakistorage.use true
/lp group default permission set emakistorage.unlock.purchase true
/lp group vip permission set emakistorage.slots.100 true
/lp group vip permission set emakistorage.stacklimit.100000 true
/lp group admin permission set emakistorage.admin true

reload Behaviour

/estorage reload performs the following work:

  1. Releases missing default resources, controlled by config.yml > release_default_data.
  2. Re-reads config.yml, lang/*.yml, unlock_costs.yml and gui/storage_gui.yml.
  3. Recomputes the GUI layout for the new gui.storage_rows.
  4. Reports how many GUI templates were loaded.

A gui.storage_rows outside 1–5 is clamped with a console warning, see Configuration.

Common Failure Reasons

SituationExplanation
Player not foundThe name does not match exactly and no cached offline player exists.
Player ... is offline, cannot perform this writeslot grant and stacklimit targets must be online.
Storage data is still loading, try again shortlyThe target is online but their storage has not finished loading.
Slot emptyThe logical slot given to stacklimit slot currently holds no entry.
stacklimit argument rejectedThe parsed value is <= 0 or out of long range. Use a positive integer, a compact unit or max.
Warehouse window fails to openThe GUI template was not loaded or failed to parse; check console warnings.