StorageRankFloors (plugin)¶
Gives donor ranks more Pixelmon PC boxes and Day Care breeding slots. Each rank sets a minimum total through a LuckPerms node, and the pixelmonbridge mod applies it.
What it does¶
- Reads two LuckPerms "ladders" of nodes:
pixelmonbridge.pcbox.floor.Ngives a minimum of N PC boxes.pixelmonbridge.breeding.floor.Ngives a minimum of N Day Care breeding slots.- Finds the highest node a player holds on each ladder and reports it to pixelmonbridge as a floor.
- pixelmonbridge does the rest: it adds any breeding tickets the player bought (from skintickets), caps the result, and applies it to the player's PC and Day Care when they log in.
How the total is worked out:
total = min(ceiling, max(baseline, highest rank floor) + tickets bought)
- A floor is held, not owned. It goes away when the rank does. Floors from several ranks use the highest, never the sum.
- An extra is owned. A redeemed ticket adds on top and stays after a rank change.
- So a rank adds to what a player already bought, and losing a rank never takes away a purchase.
Current ranks on main: PC boxes 42 / 45 / 50 and breeding slots 4 / 5 / 6 for rank 1 / 2 / 3.
The baselines are 40 PC boxes and 3 breeding slots. The ceilings are 60 and 15.
How players use it¶
Players do not use any command. A player with a donor rank simply has more PC boxes and Day Care slots. A rank change shows up the next time they log in.
Staff guide¶
Set a rank's floor. The number in the node is the total the rank should have, not an increase. Give each rank one node from each ladder:
/lp group rank1 permission set pixelmonbridge.pcbox.floor.42 true
/lp group rank1 permission set pixelmonbridge.breeding.floor.4 true
/lp group rank2 permission set pixelmonbridge.pcbox.floor.45 true
/lp group rank2 permission set pixelmonbridge.breeding.floor.5 true
/lp group rank3 permission set pixelmonbridge.pcbox.floor.50 true
/lp group rank3 permission set pixelmonbridge.breeding.floor.6 true
Inheritance is safe. A rank 3 player who also inherits rank 1 and rank 2 gets 50 boxes, not the
sum. When you change a floor, remove the old node so the ladder stays clean. LuckPerms on main
does not auto-sync, so run /lp sync after a database change.
Check a player. Needs storagerankfloors.admin (op by default):
/storagerankfloors info Steve
/srfloors info Steve
It shows the rank floor for PC boxes and breeding slots. It does not show tickets or the final total. The player must have joined the server before.
Do not raise storage any other way. Pixelmon's box-count event holds one number with no record of who set it. A second plugin or mod writing it would double-count or overwrite this one, with no error. The floor node is the only supported route.
Configuration¶
plugins/StorageRankFloors/config.yml. There is no reload command, so a change needs a restart.
| Key | What it does |
|---|---|
provider-name |
The name shown in pixelmonbridge's boot line. Leave as storagerankfloors. |
pc-box-floor-prefix |
Node prefix for the PC-box ladder. A missing trailing dot is added for you. |
breeding-slot-floor-prefix |
Node prefix for the breeding-slot ladder. |
pc-box-max-floor |
Highest PC-box node to look for. Keep it equal to pixelmonbridge's max-pc-boxes (60). |
breeding-slot-max-floor |
Highest breeding node to look for. Keep it equal to max-breeding-slots (15). |
The ceilings and baselines are not set here. They live in pixelmonbridge's capacity.properties
(max-pc-boxes, max-breeding-slots) and in Pixelmon's storage.yml (computer-boxes) and
breeding.yml (default-day-care-amount).
Data and storage¶
None. The plugin saves nothing. Floors live in LuckPerms. Tickets live in skintickets' database.
Troubleshooting¶
| Symptom | Cause | Fix |
|---|---|---|
| Donor did not get more boxes | The rank has no floor node, or LuckPerms has not synced | Check with /storagerankfloors info <player>, run /lp sync, then have them relog |
| Rank changed but boxes did not | Floors apply on login | Have the player log out and back in |
StorageRankFloors is not active. |
pixelmonbridge is missing or too old, so the plugin disabled itself | Install a pixelmonbridge with the capacity feature and restart |
No cached profile for ... |
The player has never joined | Expected |
| Plugin disabled at boot with a LuckPerms error | LuckPerms did not load | Fix LuckPerms first |
Boot log lines that mean it loaded:
[StorageRankFloors] Rank storage floors active. PC boxes read from pixelmonbridge.pcbox.floor.N (scan to 60), breeding slots from pixelmonbridge.breeding.floor.N (scan to 15). ...
pixelmonbridge also lists it: Capacity providers registered: 2 [skintickets, storagerankfloors].
Maintainer notes¶
- Why a plugin and not part of the mod. The floor comes from LuckPerms, and a NeoForge mod
cannot read Bukkit plugins. A Bukkit plugin on Youer can call into mod classes, so the plugin
registers itself with pixelmonbridge through
StorageCapacity.register. - Only
CapacityBridgenames a pixelmonbridge type. A mod type in the main class's signature fails while the class loads, beforeonEnable, where nothing can catch it (VaultTickets 1.0.0 died that way). The call sits insidetry/catch(LinkageError), so a missing mod disables the plugin cleanly. - The read never blocks. pixelmonbridge asks on the server thread during login and PC setup. The reader only uses LuckPerms' cached user. If the user is not loaded yet, it reports "unavailable", not zero, so the bridge leaves storage alone and fixes it on login.
- It checks nodes through LuckPerms' own resolution with static query options. That works for offline users, honours negated nodes, and ignores world context.
- The ladder is scanned from the top down, so the first hit is the highest floor.
- pixelmonbridge, not this plugin, makes sure a lower allowance never deletes a Pokemon.
- This is the third copy of the floor/extra model (GTS listing limits, vault pages, Pixelmon
storage). They are kept separate on purpose. See
documentation/mods/pixelmon-storage-capacity.mdin the ops repo for the full design.
Building¶
./gradlew build
Java 21. Needs the pixelmonbridge mod jar built first at
../../Mods/pixelmonbridge/build/libs/pixelmonbridge-1.0.0.jar (compile-only). Paper API and the
LuckPerms API are compile-only too. Output: build/libs/StorageRankFloors-<version>.jar. The build
is byte-reproducible, so two clean builds give the same sha256. Unit tests cover the floor math.
Full command, permission and config tables: Reference.