Skip to main content

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

  1. Copy en-US.json to {locale}.json (e.g., fr-FR.json)
  2. Translate all values (keep the keys unchanged)
  3. 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:

CommandDescription
/kslangOpens the language selection UI page
/kslang <code>Sets language directly (e.g., /kslang de-DE)
/kslang autoClears override, uses client auto-detection

The language selection is shared across all KyuubiSoft mods via a shared directory (plugins/kslang/).

Version Bumping

warning

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

PrefixCountDescription
pet. (general)13Summon, dismiss, level-up, pickup messages
pet.filter.*6Pickup filter management
pet.stats.*4Pet stat display
pet.collection.*2Collection list entries
pet.admin.*6Admin command responses
pet.hud.*6HUD display strings and buff labels
pet.rarity.*5Rarity tier names
pet.bestiary.*4Bestiary page entries
pet.combat.*9Combat pet modes, stats, messages
mount.*7Mount summon, dismount, error messages
pet.reroll.*2Reroll scroll messages
pet.refine.*2Refine scroll messages
pet.scroll.*6Scroll item names and error messages
pet.type.*1Type lookup errors
pet.discovered1Discovery notification

Total: 74 keys (+ _localization_version metadata field)

Placeholder Reference

PlaceholderUsage 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)