Localization
The pet system supports full localization via JSON files.
File Location
plugins/Pets/i18n/
en-US.json — English (default)
de-DE.json — Deutsch
fr-FR.json — Francais
es-ES.json — Espanol
pt-BR.json — Portugues (BR)
ru-RU.json — Russian
pl-PL.json — Polski
tr-TR.json — Turkish
it-IT.json — Italiano
Adding a Language
- Copy
en-US.jsonto{locale}.json(e.g.,fr-FR.json) - Translate all values (keep the keys unchanged)
- Restart the server or use
/kspetadmin reload
The player's client language is detected automatically via playerRef.getLanguage().
Language Selection
Players can change their language using the /kslang command:
| Command | Description |
|---|---|
/kslang | Opens the language selection UI page |
/kslang <code> | Sets language directly (e.g., /kslang de-DE) |
/kslang auto | Clears override, uses client auto-detection |
The language selection is shared across all KyuubiSoft mods via a shared directory (plugins/kslang/).
Version Bumping
When adding new i18n keys, you must bump the _localization_version value. The plugin uses a file-first pattern — if a localization file already exists on disk, it will not be overwritten by the JAR default. Only when the version number increases does the plugin replace the deployed file with the updated version from the JAR.
Forgetting to bump the version means deployed servers will never receive the new keys.
Complete Key List (v6)
Placeholders use {0}, {1}, etc. for dynamic values.
{
"_localization_version": "6",
"pet.prefix": "[Pets]",
"pet.summoned": "You summoned your pet {0}!",
"pet.dismissed": "Your pet {0} has been dismissed.",
"pet.already_active": "You already have a pet active! Dismiss it first.",
"pet.not_active": "You don't have an active pet.",
"pet.not_owned": "You don't own a pet of type {0}.",
"pet.max_pets": "You have reached the maximum number of pets ({0}).",
"pet.renamed": "Your pet has been renamed to {0}.",
"pet.level_up": "Your pet {0} reached level {1}!",
"pet.pickup": "Your pet picked up {0}x {1}.",
"pet.no_collector_pet": "You don't have a pickup pet.",
"pet.dismissed_drop": "Your pet was dismissed because its item was dropped.",
"pet.discovered": "New Pet Discovered!",
"pet.filter.mode_set": "Pickup filter mode set to {0}.",
"pet.filter.added": "Filter rule added: {0} = {1}.",
"pet.filter.removed": "Filter rule removed.",
"pet.filter.cleared": "All filter rules cleared.",
"pet.filter.empty": "No filter rules set.",
"pet.filter.preset_applied": "Filter preset '{0}' applied.",
"pet.stats.header": "--- Pet Stats: {0} ---",
"pet.stats.level": "Level: {0}/{1}",
"pet.stats.xp": "XP: {0}/{1}",
"pet.stats.items": "Items picked up: {0}",
"pet.stats.buffs": "Active buffs: {0}",
"pet.collection.header": "--- Pet Collection ---",
"pet.collection.owned": "{0} - Lv.{1} (Owned)",
"pet.collection.locked": "{0} - ???",
"pet.type.not_found": "Unknown pet type: {0}.",
"pet.admin.given": "Gave pet {0} to {1}.",
"pet.admin.removed": "Removed pet {0} from {1}.",
"pet.admin.level_set": "Set {0}'s {1} to level {2}.",
"pet.admin.xp_added": "Added {0} XP to {1}'s {2}.",
"pet.admin.reloaded": "Pet configuration reloaded.",
"pet.admin.player_not_found": "Player {0} not found.",
"pet.hud.title": "PET",
"pet.hud.level": "Lv. {0}",
"pet.hud.xp": "{0}/{1} XP",
"pet.hud.items": "{0} items collected",
"pet.hud.buff.damage_bonus": "+{0}% Damage",
"pet.hud.buff.pickup_radius_bonus": "+{0} Pickup Range",
"pet.hud.buff.xp_bonus": "+{0}% Pet XP",
"pet.rarity.common": "Common",
"pet.rarity.uncommon": "Uncommon",
"pet.rarity.rare": "Rare",
"pet.rarity.epic": "Epic",
"pet.rarity.legendary": "Legendary",
"pet.bestiary.progress": "{0}/{1} Discovered",
"pet.bestiary.discovered_on": "Discovered: {0}",
"pet.bestiary.highest_level": "Highest: Lv. {0}",
"pet.bestiary.undiscovered": "Not yet discovered",
"pet.combat.no_active": "No active pet.",
"pet.combat.not_combat": "Your active pet is not a combat pet.",
"pet.combat.mode_current": "Current mode: {0}",
"pet.combat.mode_usage": "Usage: /kscombatpet mode <aggressive|defensive|passive>",
"pet.combat.mode_invalid": "Invalid mode. Use: aggressive, defensive, passive",
"pet.combat.mode_set": "Combat mode set to: {0}",
"pet.combat.stats_header": "--- Combat Pet Stats ---",
"pet.combat.stats_mode": "Mode: {0}",
"pet.combat.stats_damage": "Damage: {0} (DPS: {1})",
"pet.combat.stats_range": "Attack Range: {0} | Aggro Range: {1}",
"pet.combat.stats_kills": "Kills: {0}",
"mount.mounted": "You mounted {0}!",
"mount.dismounted": "You dismounted.",
"mount.already_mounted": "Already mounted. Use /ksmount dismount first.",
"mount.summon_usage": "Usage: /ksmount summon <type>",
"mount.type_not_found": "Mount type not found: {0}",
"mount.summon_failed": "Failed to summon mount.",
"mount.not_mounted": "Not currently mounted.",
"mount.no_mounts": "No mounts configured.",
"pet.reroll.not_unlocked": "This stat is not unlocked yet!",
"pet.reroll.need_scroll": "You need a {0}!",
"pet.refine.not_unlocked": "This stat is not unlocked yet!",
"pet.refine.need_scroll": "You need a {0}!",
"pet.scroll.battle_reroll": "Battle Reroll Scroll",
"pet.scroll.battle_refine": "Battle Refine Scroll",
"pet.scroll.pet_reroll": "Pet Reroll Scroll",
"pet.scroll.pet_refine": "Pet Refine Scroll",
"pet.scroll.summon_first": "Summon a pet first!",
"pet.scroll.no_stats": "This pet has no stats!",
"pet.scroll.summon_first_reroll": "Summon a pet first before using a reroll scroll!",
"pet.scroll.no_stats_reroll": "This pet has no stats to reroll!"
}
Key Categories
| Prefix | Count | Description |
|---|---|---|
pet. (general) | 13 | Summon, dismiss, level-up, pickup messages |
pet.filter.* | 6 | Pickup filter management |
pet.stats.* | 4 | Pet stat display |
pet.collection.* | 2 | Collection list entries |
pet.admin.* | 6 | Admin command responses |
pet.hud.* | 6 | HUD display strings and buff labels |
pet.rarity.* | 5 | Rarity tier names |
pet.bestiary.* | 4 | Bestiary page entries |
pet.combat.* | 9 | Combat pet modes, stats, messages |
mount.* | 7 | Mount summon, dismount, error messages |
pet.reroll.* | 2 | Reroll scroll messages |
pet.refine.* | 2 | Refine scroll messages |
pet.scroll.* | 6 | Scroll item names and error messages |
pet.type.* | 1 | Type lookup errors |
pet.discovered | 1 | Discovery notification |
Total: 74 keys (+ _localization_version metadata field)
Placeholder Reference
| Placeholder | Usage Examples |
|---|---|
{0} | Pet name, item name, player name, count, current value |
{1} | Max level, max XP, second value (DPS, aggro range) |
{2} | Level number (in admin set-level) |