Installation
SnPets is a licensed Sn plugin. Install it, boot once to generate the license file, paste your key, then restart.
- Download the latest
snpets-v*release from Sn-Releases. - Place the
.jarfile into your server'splugins/folder. - Start the server once. The plugin creates
plugins/.Sn-License/license.yml. - Open that file and paste your Sn license key in place of the placeholder line.
- Restart the server. The plugin validates the key at startup.
SnLib is required and must be installed as its own plugin in plugins/. This build targets
com.sn:snlib 1.31.0, so run that version or newer. SnLib is never bundled inside the jar.
1.31.0 is what the drop key (Q) in the storage menu needs, and it is a requirement the startup API check cannot enforce: SnLib 1.31.0 grew no new Java surface, so its API level is the same as 1.28.0's. On an SnLib older than 1.31.0 SnPets still enables normally and everything else works - only Q over a stored pet does nothing.
The key file at plugins/.Sn-License/license.yml is shared by every Sn bundle plugin on the
server. One key unlocks all of them, so you only paste it once, no matter how many bundle
plugins you run. Without a valid key the plugin refuses to enable and disables itself during
startup.
Dependencies
| Plugin | Required |
|---|---|
| SnLib | Yes |
| packetevents | Yes |
| PlaceholderAPI | No |
| BetterModel | No |
| EdTools | No |
| Floodgate | No |
SnLib is the engine behind the config, language, database, item, menu and command layers.
packetevents draws every pet and sends the formation updates, so the plugin cannot run
without it. PlaceholderAPI adds the %snpets_...% expansion. BetterModel lets a pet type
render as an animated model instead of a head. EdTools lets an equipped pet grant currency and
global-enchant boosters, and unlocks the EDTOOLS_BLOCK_BREAK experience source so a pet can level
from the blocks an omnitool consumes. It is reached through only two isolated classes, and a server
without it never loads an EdTools type: the break listener is not even registered. Floodgate is
only needed to recognise Bedrock players, so the plugin can send them the armor stand substitute a
Geyser client actually renders instead of the Display entities it discards; without it every player
counts as a Java client and the bedrock: band of config.yml does nothing. It is reached through
one isolated class and asked one question - whether a UUID belongs to a Bedrock player - once, when
that player joins.
Folia is not supported. The plugin does not declare folia-supported, so run it on Paper.
The plugin targets Paper 1.20.4 and newer, and both the 1.20 and 1.21 lines are supported. Java 21 or newer is required, since the jar is compiled at release 21.
What the first boot creates
On a clean install the plugin writes its own files into plugins/SnPets/:
| File | Purpose |
|---|---|
config.yml | Every tunable: formation, animation, buffs, fusion, boxes and more |
lang/messages_en.yml | Every user facing message, in English |
lang/messages_es.yml | The same messages, in Spanish |
guis/*.yml | The seven menu layouts |
traits.yml | Trait definitions and their roll weights |
boost-grades.yml | The boost grade ladder |
pets/*.yml | One file per pet type, three examples seeded |
boxes.yml | Every pet box, one top-level key each, two examples seeded |
The pets/ folder and the traits.yml, boost-grades.yml and boxes.yml files are seeded
exactly once, on a true fresh install. After that they belong to you. A pet file you delete
stays deleted and is never restored on the next boot, and the three keyed files carry a
# sn:extensible-root header so a key you delete stays deleted too. config.yml, the language
files and the menu layouts are managed instead: new keys are merged in on boot while your
values and comments are preserved.
Upgrading from a version older than 1.4.0? Your boxes/ folder is folded into boxes.yml
automatically on the first boot and kept as boxes-migrated/. Nothing is deleted and the box
items already handed out keep working.
Once the server starts cleanly, run /pets admin give <player> ember_fox to hand out the
first pet, then open /pets to see it in storage.