Wild Pets
0
First released July 25, 2021 · Last updated October 12, 2026
Downloads from this site
159 total
2 latest (v1.11.0)
Allows players to tame any entity and keep them as a pet.
Usage
Last reported in use 3 hours ago
423 server starts in the last 30 days
Server starts per day
Versions in use, by share of server starts
1.9.0
62% · 262 starts
1.10.0
37% · 155 starts
2.0.0-SNAPSHOT-8-8-2026
1% · 6 starts
Usage reported by trace — how it works. CI and test servers are excluded.
Verified before release
Version 1.11.0 was started on real servers running Minecraft 1.19.4, 1.21.11, 26.2 and 26.3 before it was published. The jar you download is the exact one that passed. How releases work
Versions
All releases on GitHubAutomated build of main at 99958b5ed1cf51bfd5f7e54fa4173ff63cfe1405.
This is not a release. It is unreleased, unreviewed code that has not been through any release check, and a broken build can stop a server from starting. Do not run it on a server you care about without a backup.
Install it with Dan's Plugin Manager:
/dpm get wildpets --experimentalReturn to published releases with /dpm get wildpets --stable.
1.11.0
For a server on v1.10.0, this is a drop-in upgrade. It adds support for Minecraft 26.3 and fixes a bug where a leftover lock, unlock, tame or access-check request could fire on a later right-click. Usage reporting now sends one more thing: a random server ID, kept in plugins/trace/config.yml. It is not tied to any person, account or IP address. Your existing config and pet data carry over unchanged.
Changes
Compatibility
- Added support for Minecraft 26.3 (#339).
Fixes
- Only one right-click action can be waiting at a time. If you start taming, locking, unlocking, checking access or selecting, any earlier unfinished action is cancelled, so your next right-click does what you last asked. Before this, a lock or unlock you hadn't finished could fire when you meant to tame a pet, or the other way round (issue #330).
Usage reporting
- Each usage event now includes a random server ID so servers can be counted instead of events (#336). The first time reporting runs, the ID is added to
plugins/trace/config.ymlas aserver-id:line with a comment explaining it. Delete that line to get a new ID. If reporting is turned off, no ID is created, read or sent. - The startup message and the comments in
config.ymlnow mention the server ID. They also point to https://danielstephenson.dev/usage-reporting for details (#338, #340). - You can still turn reporting off the same ways as before:
usage-reporting.enabled: falsein this plugin'sconfig.yml,enabled: falseinplugins/trace/config.ymlfor every plugin, or the environment variableTRACE_USAGE_REPORTING=off(orDO_NOT_TRACK=1).
Version
v1.10.0 → 1.11.0 — MINOR. Mechanical floor from comparing the two jars: MINOR.
Judgment: I kept the floor at minor. The mechanical evidence shows new data on disk: when usage reporting is on, a random server-id line is now added to plugins/trace/config.yml. It also shows support for a new Minecraft version. Right-click modes now cancel each other, which fixes a bug (issue #330). No command arguments, permissions, config key meanings or pet data formats changed, so nothing existing should break and a major bump isn't justified.
- minor: storage path changed: src/main/java/dansplugins/wildpets/data/EphemeralData.java
<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>
- dansplugins.wildpets.trace.TraceClient: added public java.lang.String installId();
- dansplugins.wildpets.trace.TraceClient: added public static java.lang.String installIdFromFile(java.io.File);
- dansplugins.wildpets.trace.TraceClient$Builder: added public dansplugins.wildpets.trace.TraceClient$Builder installId(java.lang.String);
- dansplugins.wildpets.trace.TraceClient$Builder: added public dansplugins.wildpets.trace.TraceClient$Builder installIdFile(java.io.File);
</details>
Verification
Verified on a real Spigot server before publication; this release carries the exact jar that was verified.
- boot gate run: booted twice on a fresh Spigot server running Minecraft 1.19.4 (11 assertions passed).
- boot gate run: booted twice on a fresh Spigot server running Minecraft 1.21.11 (11 assertions passed).
- boot gate run: booted twice on a fresh Spigot server running Minecraft 26.2 (11 assertions passed).
- boot gate run: booted twice on a fresh Spigot server running Minecraft 26.3 (11 assertions passed).
- save-compatibility gate run: data written by
v1.10.0was loaded by this release across two restarts with nothing lost (16 assertions passed).
Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.
drafted by Claude on behalf of Daniel Stephenson
1.10.0
For a server running v1.9.0, this is a drop-in upgrade. The main fix is to pet records. Before this release, the plugin did not load the saved records back into memory at startup, and the records it saved could be missing changes made since the last restart. Saved records are now loaded and kept across restarts, so details such as the name of a pet that has since died stay available. This release also fixes some smaller bugs, makes the Sniffer default work on newer Minecraft versions, and adds two optional usage-reporting features. Saved data formats, commands, permissions and config keys are unchanged.
Changes
Pet data
- Pet records saved in
petRecords.jsonare now loaded at startup and saved from the same store the plugin uses while running. They used to be thrown away on load, and changes made during a session could fail to persist. (#325)
Bug fixes
- Unlocking mode (
/wp unlock) is now cleared when a player leaves, like the other pet action modes. Before, a player who quit mid-unlock was still in unlocking mode when they rejoined. (#324) - Removed a duplicate Endermite entry from the default entity settings. (#324)
- The Sniffer's default taming item (short grass) is now looked up by name, so it works on Minecraft versions from 1.20.3 onward, where the item is named
SHORT_GRASS, as well as on older ones. (#327)
Usage reporting
- Every usage-reporting event now includes the plugin version, not just the startup event. (#329)
- The shared
plugins/trace/config.ymlfile now supports an optionaltags:block. Its tags are added to every event that participating plugins report. For example, you can setci: "true"on a test server so its events are not counted as a real installation. Newly created files include a commented-out example, and existing files are not changed. (#328)
Version
v1.9.0 → 1.10.0 — MINOR. Mechanical floor from comparing the two jars: MINOR.
Judgment: There is no breaking change here, so this stays at the minor floor. The pets.json and petRecords.json formats are unchanged, and no command arguments, permissions or config key meanings change. The behaviour changes are bug fixes: pet records saved to disk are now loaded back, unlocking mode is cleared on quit, a duplicate Endermite default is removed, and the Sniffer taming item is looked up by name. The other changes add new optional behaviour: usage events now carry the plugin version, and the shared plugins/trace/config.yml can hold an optional tags block. Existing servers don't need to do anything for either.
- minor: storage path changed: src/main/java/dansplugins/wildpets/data/EphemeralData.java
- minor: storage path changed: src/main/java/dansplugins/wildpets/pet/record/PetRecordRepository.java
- minor: storage path changed: src/main/java/dansplugins/wildpets/storage/StorageService.java
<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>
- public class added: dansplugins.wildpets.utils.RenamedConstants
- dansplugins.wildpets.pet.record.PetRecordRepository: added public boolean addExistingPetRecord(dansplugins.wildpets.pet.record.PetRecord);
- dansplugins.wildpets.pet.record.PetRecordRepository: added public void clearAll();
- dansplugins.wildpets.trace.TraceClient: removed/changed public static dansplugins.wildpets.trace.TraceClient$Builder builder(java.lang.String, java.lang.String);
- dansplugins.wildpets.trace.TraceClient: added public static dansplugins.wildpets.trace.TraceClient$Builder builder(java.lang.String, java.lang.String, java.lang.String);
- dansplugins.wildpets.trace.TraceClient: added public static final java.lang.String VERSION;
</details>
Verification
Verified on a real Spigot server before publication; this release carries the exact jar that was verified.
- boot gate run: booted twice on a fresh Spigot server running Minecraft 1.19.4 (11 assertions passed).
- boot gate run: booted twice on a fresh Spigot server running Minecraft 1.21.11 (11 assertions passed).
- boot gate run: booted twice on a fresh Spigot server running Minecraft 26.2 (11 assertions passed).
- save-compatibility gate run: data written by
v1.9.0was loaded by this release across two restarts with nothing lost (16 assertions passed).
Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.
drafted by Claude on behalf of Daniel Stephenson
1.9.0
A server on v1.8.0 can drop in this build with no data migration: pet and pet-record files load unchanged. Two things change on first start: the three usage-reporting.* keys are added to config.yml and reporting is on by default (the plugin sends its name, version and command names to https://trace.danielstephenson.dev, nothing about players or the server), and a new plugins/trace/config.yml is created as a server-wide switch. Players gain /wp trade, tamed pets no longer despawn when far away or after chunk reloads, and every command's chat output is restyled.
Changes
New features
/wp trade <playerName>transfers your selected pet to another online player, respecting the recipient's pet limit; guarded by the newwp.tradepermission (#298)- Usage reporting: one event at startup and one per command, sent off the main thread, with
usage-reporting.enabledinconfig.yml, a server-wideplugins/trace/config.ymlswitch, andTRACE_USAGE_REPORTING=off/DO_NOT_TRACK=1environment opt-outs; the console states on startup whether reporting is on and why (#318, #320)
Fixes
- Pets no longer disappear: tamed entities are marked
setRemoveWhenFarAway(false)and persistence flags are re-applied when their chunk loads and after startup (#299) - Duplicate pet records are no longer created for the same entity, and pet entity lookups are indexed by UUID instead of scanning every list (#314)
Command output
- All command, interaction and event messages use the box-drawing style shared with Activity Tracker;
/wp config listis now one aligned key per line (#301) /wp helpnow listscheckaccess,statsandtrade(#308, #298)
Upgrade notes
- Usage reporting is enabled by default. To turn it off for this plugin set
usage-reporting.enabled: falseinplugins/WildPets/config.yml; to turn it off for every trace-reporting plugin setenabled: falseinplugins/trace/config.yml. - Grant
wp.tradeto players who should be able to trade pets, or deny it to those who should not.
Version
v1.8.0 → 1.9.0 — MINOR. Mechanical floor from comparing the two jars: MINOR.
Judgment: Nothing in the diff breaks an existing v1.8.0 server on upgrade: the pets/records on-disk format is unchanged (load path now routes through addExistingPet and dedupes records, but reads the same data), the new usage-reporting config keys are additive and are written into an existing config.yml at startup, and no existing command's arguments or semantics change (output is restyled and /wp now returns true instead of falling through to Bukkit's usage line). The Ponder removal swaps Pet's Lockable/Savable interfaces for local copies and narrows getAccessList() to List, but the mechanical check already saw that signature change and Wild-Pets is not consumed as a library by other plugins in practice. The substantive new behaviour is /wp trade with the wp.trade permission, usage reporting that is on by default and writes plugins/trace/config.yml, and the pet-persistence fix, all of which are minor.
- minor: permission added: wp.trade
- minor: default config key added: usage-reporting.enabled
- minor: default config key added: usage-reporting.endpoint
- minor: default config key added: usage-reporting.key
- minor: storage path changed: src/main/java/dansplugins/wildpets/data/Lockable.java
- minor: storage path changed: src/main/java/dansplugins/wildpets/data/Savable.java
- minor: storage path changed: src/main/java/dansplugins/wildpets/pet/Pet.java
- minor: storage path changed: src/main/java/dansplugins/wildpets/pet/list/PetListRepository.java
- minor: storage path changed: src/main/java/dansplugins/wildpets/pet/record/PetRecord.java
- minor: storage path changed: src/main/java/dansplugins/wildpets/pet/record/PetRecordRepository.java
- minor: storage path changed: src/main/java/dansplugins/wildpets/storage/StorageService.java
<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>
- public class added: dansplugins.wildpets.commands.AbstractPluginCommand
- public class added: dansplugins.wildpets.commands.ArgumentParser
- public class added: dansplugins.wildpets.commands.CommandService
- public class added: dansplugins.wildpets.commands.PermissionChecker
- public class added: dansplugins.wildpets.commands.TradeCommand
- public class added: dansplugins.wildpets.data.Lockable
- public class added: dansplugins.wildpets.data.Savable
- public class added: dansplugins.wildpets.helpers.UUIDChecker
- public class added: dansplugins.wildpets.listeners.ChunkLoadHandler
- public class added: dansplugins.wildpets.listeners.EventHandlerRegistry
- public class added: dansplugins.wildpets.trace.TraceClient
- public class added: dansplugins.wildpets.trace.TraceClient$Builder
- public class added: dansplugins.wildpets.utils.MessageFormat
- dansplugins.wildpets.config.ConfigService: added public boolean isUsageReportingEnabled();
- dansplugins.wildpets.config.ConfigService: added public java.lang.String getUsageReportingEndpoint();
- dansplugins.wildpets.config.ConfigService: added public java.lang.String getUsageReportingKey();
- dansplugins.wildpets.config.ConfigService: added public void saveUsageReportingDefaultsIfNotPresent();
- dansplugins.wildpets.pet.Pet: removed/changed public java.util.ArrayList<java.util.UUID> getAccessList();
- dansplugins.wildpets.pet.Pet: added public java.util.List<java.util.UUID> getAccessList();
- dansplugins.wildpets.pet.Pet: added public static void applyPersistenceFlags(org.bukkit.entity.Entity, boolean);
- dansplugins.wildpets.pet.Pet: added public void ensurePersistence();
- dansplugins.wildpets.pet.Pet: added public void ensurePersistence(org.bukkit.entity.Entity);
- dansplugins.wildpets.pet.Pet: added public void transferOwnershipTo(java.util.UUID, java.util.UUID);
- dansplugins.wildpets.pet.list.PetList: added public boolean removePetForTransfer(dansplugins.wildpets.pet.Pet);
- dansplugins.wildpets.pet.list.PetList: added public dansplugins.wildpets.pet.list.PetList(dansplugins.wildpets.config.ConfigService, java.util.UUID, dansplugins.wildpets.helpers.ServerProvider);
- dansplugins.wildpets.pet.list.PetListRepository: removed/changed public void createPetListForPlayer(java.util.UUID);
- dansplugins.wildpets.pet.list.PetListRepository: added public boolean hasNoTrackedPets();
- dansplugins.wildpets.pet.list.PetListRepository: added public boolean transferPet(dansplugins.wildpets.pet.Pet, java.util.UUID);
- dansplugins.wildpets.pet.list.PetListRepository: added public dansplugins.wildpets.pet.list.PetList createPetListForPlayer(java.util.UUID);
- dansplugins.wildpets.pet.list.PetListRepository: added public dansplugins.wildpets.pet.list.PetListRepository(dansplugins.wildpets.config.ConfigService, dansplugins.wildpets.helpers.ServerProvider);
- dansplugins.wildpets.pet.list.PetListRepository: added public void addExistingPet(dansplugins.wildpets.pet.Pet);
- dansplugins.wildpets.pet.list.PetListRepository: added public void clearAll();
- dansplugins.wildpets.pet.record.PetRecord: added public int hashCode();
- dansplugins.wildpets.pet.record.PetRecordRepository: added public dansplugins.wildpets.pet.record.PetRecord getOrCreatePetRecord(dansplugins.wildpets.pet.Pet) throws dansplugins.wildpets.exceptions.PetRecordNotFoundException;
</details>
Verification
Booted twice on a real Spigot server before publication — boot gate run (10 assertions passed). This release carries the exact jar that was verified.
Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.
drafted by Claude on behalf of Daniel Stephenson
Snapshot release marking Wild-Pets's move to an AI-first development approach.
Day-to-day feature work, grooming, review and maintenance now run through AI agents working directly against this repository, with the maintainers setting direction and approving what lands. The version bump marks that change in how the project is built — it is not a compatibility break. Behaviour, configuration and stored data are unchanged, and existing installations can upgrade in place.
This is a dated snapshot, not a finished release. It follows the precedent set by Medieval
Factions' 6.0.0-SNAPSHOT-7-25-2026: the AI-first line has not yet been verified in live operation,
and the snapshot designation stays until it has.
Version changes
pom.xml:1.8.0→2.0.0-SNAPSHOT-8-8-2026
Opened as https://github.com/Dans-Plugins/Wild-Pets/pull/306.
Drafted by Claude on behalf of Daniel Stephenson.
This release introduces a new Stay Mode for pets, allowing players to restrict pet movement using AI-based behavior control. In addition to gameplay improvements, the test Minecraft server setup has been refined with refactored scripts, updated Docker support, and improved environment configuration.
Testing documentation has also been updated to improve clarity and maintainability for contributors. We are also pleased to welcome a new contributor in this release.
Highlights
- Added Stay Mode for pet movement control using AI-based restrictions
- Improved Minecraft server setup with refactored scripts and updated Docker configuration
- Updated and expanded testing documentation
- New contributor: @Babakinha
Full Changelog
https://github.com/Dans-Plugins/Wild-Pets/compare/v1.7.0...v1.8.0
What's Changed
- Sync develop with main by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/270
- Refactored 'Pet' class & added initial unit tests by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/273
- Added entity configs for Allay, Frog, Warden, Camel & Sniffer by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/276
- Updated CONTRIBUTING.md by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/277
- Release/v1.7 by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/278
Full Changelog: https://github.com/Dans-Plugins/Wild-Pets/compare/v1.6.0...v1.7.0
What's Changed
- Release/v1.5.1 by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/252
- Merge pull request #252 from Dans-Plugins/release/v1.5 by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/253
- Data Repositories by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/257
- Test Server Dockerfile by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/264
- Cancel Damage From Pets by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/267
- New Permission:
wpby @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/268 - Release/v1.6 by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/269
Full Changelog: https://github.com/Dans-Plugins/Wild-Pets/compare/1.5.1...v1.6.0
What's Changed
- Fix - Add set free to help command by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/251
Full Changelog: https://github.com/Dans-Plugins/Wild-Pets/compare/1.5.0...1.5.1
What's Changed
- Moving away from the Singleton pattern. by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/243
- Added missing services. by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/244
Full Changelog: https://github.com/Dans-Plugins/Wild-Pets/compare/1.4.2...1.5.0
Full Changelog: https://github.com/Dans-Plugins/Wild-Pets/compare/1.4.1...1.4.2
The stay command has been removed because the implementation was shown to be causing lag.
What's Changed
- Call Command Fix by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/240
- Removed the stay command. by @dmccoystephenson in https://github.com/Dans-Plugins/Wild-Pets/pull/241
Full Changelog: https://github.com/Dans-Plugins/Wild-Pets/compare/1.4...1.4.1
What's Changed
- MIT License
- Updated Ponder to v1.0
Full Changelog: https://github.com/Dans-Plugins/Wild-Pets/compare/v1.3.2...1.4
Changes in Wild Pets v1.3.2
- Parents of pets will now only be shown if they exist.
- Added 3 new config options.
Changes in Wild Pets v1.3.1
- Added a null check.
- Made it so that the parents of born pets are tracked regardless of their pet status.
- Updated Ponder and made sure that its debug messages weren't showing in the console.
Changes in Wild Pets v1.3
- Fixed a bug where the "petLimit" config option was being set to the wrong type when using the in-game /wp config set command.
- Made it so that the parents and children of pets will now be tracked.
- Made it so that the children of pets are also pets.
Changes in Wild Pets v1.2.1
- Made pets invulnerable by cancelling the EntityDamageEvent if the entity is a pet.
- Improved the Interaction Handler so locking functioned better.
Changes in Wild Pets v1.2
- Utilized Ponder for most of the plugin's core functionality.
- Made it so that the ephemeral data of players is deleted when they log out.
Changes in Wild Pets v1.1.1
- Fixed players not being able to mount their pets because they didn't have access to them.
Changes in Wild Pets v1.1
- Added the /wp stats command.
- Made pets lockable.
- Prevented players from mounting pets if they didn't have access.
First Release
This is the first release version of Wild Pets.
Changes in Wild Pets v1.0
- Added the /wp follow command, allowing players to command their selected pet to follow them.
- Prevented players from taming non-mob entities.
- Prevented pets from taking damage from blocks.
- Added a config option to cancel taming after a failed attempt.
- The last known location of a pet will now be saved and used if a pet can no longer be found.
- Abstracted the debug flag out to a config option.
- Created the /mf config command, allowing players to view and set config options.
- Added a config option for the right click cooldown time for viewing pet info.
- Added the "secondsBetweenStayTeleports" config option.
- Added a config option to allow players to right click to select pets by default.
- Prevented players from naming their pets "cancel".
- Allowed those with permission to view other players' lists of pets.
- Created a fix for the teleporting task not getting scheduled upon loading the plugin files when the pet is staying.
- Made some improvements to the Config Manager
- If the maximum number of attempts is reached when attempting to schedule the teleporting task for a pet, their movement status will be set to "Wandering".
- An hourly autosave is now scheduled when the server starts.
- Added a config option for the character limit for names of pets.
Naming has been improved. New pets will be given a unique name upon being tamed and players can no longer give multiple pets the same name. Further, version mismatch handling has been implemented and bStats has been integrated.
This is the first version that will be beta tested by the Kingdom Community.
Related plugins
Something wrong, or something missing?
Bugs go to the plugin's issue tracker, where they can actually be fixed and tracked. Ideas for new behaviour go to the Dev Portal, where the community can upvote them.
