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
| Command | Permission | Description |
|---|---|---|
/estorage | emakistorage.use | Opens your own warehouse. Players only. |
/estorage help | No extra check | Shows help. |
/estorage open <player> | emakistorage.admin | Opens a target player's warehouse as an admin. The sender must be a player. |
/estorage slot grant <player> <amount> | emakistorage.admin | Adjusts the target's granted slot pool. A negative amount reclaims slots. |
/estorage stacklimit player <player> <limit> | emakistorage.admin | Sets the target's player-level per-slot ceiling. |
/estorage stacklimit slot <player> <slot> <limit> | emakistorage.admin | Sets the entry-level ceiling of one logical slot. |
/estorage info <player> | emakistorage.admin | Prints the capacity breakdown, page count, stackLimit, sort mode and total amount. |
/estorage export <player> | emakistorage.admin | Exports the warehouse as readable YAML into exports/export-<uuid>.yml. |
/estorage reload | emakistorage.reload or emakistorage.admin | Reloads config, language and GUI templates, then reports the loaded template count. |
/estorage debug ... | emakistorage.debug or emakistorage.admin | Manages debug modules. Available modules are storage and chat_input; subcommands come from CoreLib's DebugCommand. |
Examples
/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 onArgument Formats
| Argument | Accepted input | Notes |
|---|---|---|
<amount> (slot grant) | Decimal integer, may be negative | Negative values reclaim granted slots. |
<limit> (stacklimit) | Decimal number, compact units (k m b t p e), max | max 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
| Permission | Default | Scope |
|---|---|---|
emakistorage.use | true | Opening your own warehouse. |
emakistorage.unlock.purchase | true | Using paid expansion in the GUI. Also requires unlock.purchase_enabled: true. |
emakistorage.reload | op | Using /estorage reload. Can be replaced by emakistorage.admin. |
emakistorage.debug | op | Using /estorage debug .... Can be replaced by emakistorage.admin. |
emakistorage.admin | op | Using 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 prefix | Effect | Resolution rule |
|---|---|---|
emakistorage.slots.<n> | Adds n slots | Scans every effective permission and takes the highest numeric suffix. Tiers do not stack. |
emakistorage.stacklimit.<n> | Provides a player-level per-slot ceiling of n | Also 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:
/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 truereload Behaviour
/estorage reload performs the following work:
- Releases missing default resources, controlled by
config.yml > release_default_data. - Re-reads
config.yml,lang/*.yml,unlock_costs.ymlandgui/storage_gui.yml. - Recomputes the GUI layout for the new
gui.storage_rows. - 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
| Situation | Explanation |
|---|---|
Player not found | The name does not match exactly and no cached offline player exists. |
Player ... is offline, cannot perform this write | slot grant and stacklimit targets must be online. |
Storage data is still loading, try again shortly | The target is online but their storage has not finished loading. |
Slot empty | The logical slot given to stacklimit slot currently holds no entry. |
stacklimit argument rejected | The parsed value is <= 0 or out of long range. Use a positive integer, a compact unit or max. |
| Warehouse window fails to open | The GUI template was not loaded or failed to parse; check console warnings. |