Skip to content

Configuration

Version: 1.12.1

All files live in the plugin’s data folder mods/kyuubisoft_pets/. They are created with their defaults on the first start.

mods/
kyuubisoft_pets/
config.json main settings (this page)
stat-pool.json stat table and rarity rules (this page)
loot_luck_blacklist.json items Loot Luck never doubles (this page)
pet-types/
collector/*.json collector pets
combat/*.json combat pets
mount/*.json mounts
localization/<lang>.json texts in 9 languages
pets.db SQLite pet database
data/players/<uuid>.json per-player data
pet_state.json spawned pet NPCs, for the cleanup after a restart
npc-roles/ NPC role files, written on every start
kslang/ language choices shared by all KyuubiSoft mods
KyuubiSoftPets_CustomItems/ generated summon items of custom pet types
File / folderContent
pet-types/One JSON file per pet type; the subfolder sets the module. Files whose name starts with _ (the shipped _template.json) are skipped. Missing shipped files are written again on every start and reload, so deleting a shipped pet’s file does not remove that pet. The fields are explained on Custom Pets.
localization/One file per language, version 18. Older files are backed up as <lang>.json.backup-v<old> and replaced on start. See Localization.
pets.dbThe pet records: level, XP, stats, nickname, pickup filter, combat pet health and recovery, item generations. A pets.db-wal file next to it is normal while the server runs (/kspetadmin dbflush merges it).
data/players/<uuid>.jsonPer player: which pets they own, the summoned pets, bestiary, HUD position and layout (once the player picked one), and pet items held back during a death (see FAQ).
npc-roles/Rewritten on every start. Do not edit.
mods/KyuubiSoftPets_CustomItems/When a custom pet type’s summon item does not exist, the plugin generates it here; it is available after one more restart. See Custom Pets.
  • With KyuubiSoft Core installed, config.json is merged with the defaults on start: new keys of a plugin update are added to your file.
  • Without Core, the file is read as it is. Only the newer blocks combatBalance (1.8.0) and ui (1.9.0) and the 1.11.1 keys maxPetsEverywhere and combatBalance.levelUpCombatStatsOnly are added once if they are missing; values already in the file are kept. Keys you leave out use their default.
  • /kspetadmin reload (or Reload in the admin window) re-reads config.json, loot_luck_blacklist.json, stat-pool.json, every pet type file and the language files.

Some settings are only read at server start or when a player joins:

SettingTakes effect
modules.*after a restart (the module’s commands and game systems are registered at start)
pickupTickIntervalMs, followTickIntervalMs, autoSaveIntervalSeconds, petDbFlushIntervalSecondsafter a restart
maxPetsPerPlayerfor each player at their next join (or after /kspetadmin dbreload <player>)
combatBalance.mortality.enabledswitching it on with a reload applies to combat pets summoned afterwards; switching it off protects summoned pets at once
everything elseat the next reload

The shipped file (without its _comment lines):

{
"enabled": true,
"modules": {
"collector": true,
"combat": true,
"mount": true
},
"maxPetsPerPlayer": 5,
"maxPetsEverywhere": false,
"pickupTickIntervalMs": 1000,
"followTickIntervalMs": 2000,
"autoSaveIntervalSeconds": 300,
"petDespawnOnDisconnect": true,
"petTeleportDistance": 30,
"hudPosition": "top-left",
"hudLayout": "vertical",
"xpSources": {
"mobKill": 25,
"blockBreak": 2,
"crafting": 10,
"itemPickup": 2,
"passivePerMinute": 1
},
"combatBalance": {
"damageThroughPipeline": false,
"requireOwnerActivity": false,
"ownerInactivitySeconds": 120,
"levelUpCombatStatsOnly": false,
"mortality": {
"enabled": false,
"baseHealth": 100.0,
"healthPerLevel": 5.0,
"tauntChance": 0.25,
"deathCooldownMinutes": 15,
"regenPerSecond": 2.0,
"regenDelaySeconds": 10,
"xpLossPercent": 0.0,
"playerDamage": false
}
},
"ui": {
"compendium": true,
"lockedPets": "visible",
"previewTilt": 12,
"previewSpinSpeed": 18
},
"defaultFilterMode": "blacklist",
"defaultBlacklist": ["Dirt", "Sand", "Gravel", "Cobblestone"],
"statCaps": {
"armorBonus": 0.80,
"damageBonus": 2.00,
"critChance": 0.75,
"lifeSteal": 0.50,
"xpBonus": 3.00,
"lootLuck": 2.00,
"thorns": 50.0,
"maxHealth": 500.0,
"staminaRegen": 10.0,
"manaRegen": 10.0,
"pickupRadius": 15.0
}
}
KeyDefaultEffect
enabledtrueMaster switch. With false, eggs, battle runes, mount horns and scrolls do nothing, pets earn no XP and collect nothing, combat pets do not fight and pet damage bonuses stop. The commands stay registered.
modules.collectortrueCollector pets. Off: the item pickup system is not started, collector summons from the compendium are refused and the compendium hides the collector tab.
modules.combattrueCombat pets. Off: /kscombatpet is not registered, battle runes and combat summons are refused, the compendium hides the combat tab.
modules.mounttrueMounts. Off: /ksmount is not registered, mount horns and mount summons are refused, the compendium hides the mount tab.
maxPetsPerPlayer5Pet slots per player: the number of pets on the player’s pet list (every kind together). /kspetadmin give always refuses when the player already owns this many; where else it applies is set by maxPetsEverywhere. Shown as “N / M slots” in the admin window.
maxPetsEverywherefalsefalse: maxPetsPerPlayer only stops /kspetadmin give. true: it also stops hatching a blank egg, Battle Rune or Mount Horn into a new pet (“You already have 5/5 pets. No new pet can hatch.”, before the active pet is sent home) and “Create pet” in the admin window. Items of pets the player already owns keep working.
petTeleportDistance30Blocks. A collector or combat pet farther away from its owner is teleported back next to them.
petDbFlushIntervalSeconds30Not in the shipped file; add it to change the default (with KyuubiSoft Core installed, the config merge adds it). Seconds between writes of every online player’s summoned pets to pets.db; bounds the XP lost in a crash. Minimum 5.
autoSaveIntervalSeconds300Seconds between saves of all player files.
followTickIntervalMs2000Milliseconds between runs of the backup follow check. Pets are normally followed every tick by the regular system; this check only catches collector pets that system does not track (teleport when too far, respawn when lost).
pickupTickIntervalMs1000Milliseconds between runs of a small pickup housekeeping task. Fetching items runs on its own fixed cycle (four times per second) and does not depend on this value.
KeyDefaultEffect
xpSources.mobKill25XP for the summoned collector pet when its owner kills a mob. A combat pet that makes a kill gets mobKill × victim's max health / 100.
xpSources.blockBreak2XP per broken block (none for chests, crates and other container blocks).
xpSources.crafting10XP per crafted item.
xpSources.itemPickup2XP per item the pet picks up (none for items a player dropped).

How pets level is described on Collector Pets and Combat Pets.

KeyDefaultEffect
defaultFilterMode"blacklist"Filter mode of every new pet ("blacklist" or "whitelist").
defaultBlacklist["Dirt", "Sand", "Gravel", "Cobblestone"]Added as name rules (part of the item ID, case-insensitive) to the pickup filter of every new pet: hatched from an item, given with /kspetadmin give or created in the admin window. With defaultFilterMode "whitelist" these entries become the only items the pet collects.

Existing pets keep their own filter. Players change it with /kspet filter (see Commands).

statCaps limits the total of a stat after the stats of the summoned collector pet and the summoned combat pet are added up. Fractions: 1.0 = +100 %. A cap of 0 means no cap.

KeyDefaultLimits
armorBonus0.80damage reduction from Armor (80 %)
damageBonus2.00bonus damage from Damage (+200 %)
critChance0.75Crit Chance (75 %)
lifeSteal0.50share of dealt damage healed by Life Steal (50 %)
xpBonus3.00Pet XP bonus (+300 %)
lootLuck2.00Loot Luck
thorns50.0Thorns (flat)
maxHealth500.0extra max health (points)
staminaRegen10.0extra stamina regeneration (flat)
manaRegen10.0extra mana regeneration (flat)
pickupRadius15.0extra pickup range (blocks)

Added in 1.8.0. Every switch is off by default: an untouched config keeps immortal combat pets that subtract HP directly and fight while the owner is away. Details on Combat Pets.

KeyDefaultEffect
combatBalance.damageThroughPipelinefalsetrue: pet hits are normal Hytale damage with the pet as attacker, so armor, resistances and boss invulnerability phases apply. false: direct HP subtraction that ignores them.
combatBalance.requireOwnerActivityfalsetrue: combat pets stop fighting when their owner has neither turned the camera nor attacked for ownerInactivitySeconds. Being pushed around does not count as activity. The owner gets one chat notice.
combatBalance.ownerInactivitySeconds120Seconds without activity before the pet stops fighting.
combatBalance.levelUpCombatStatsOnlyfalsetrue: a stat a combat pet unlocks through a natural level-up comes from the combat stats only (combatStatTypes in stat-pool.json), like its first stats, rerolls and admin rolls. false: from the full stat pool. Stats a pet already has are not changed.
combatBalance.mortality.enabledfalsetrue: combat pets have HP, can be defeated and need time to recover.
combatBalance.mortality.baseHealth100.0Pet HP at level 1. A pet type can override it with combatStats.baseHealth (0 = use this value).
combatBalance.mortality.healthPerLevel5.0HP per level above 1. A pet type can override it with combatStats.healthPerLevel (-1 = use this value). The pet’s Max Health stat is added on top.
combatBalance.mortality.tauntChance0.25Chance (0 to 1) per pet hit that the target turns to the pet.
combatBalance.mortality.deathCooldownMinutes15Minutes a defeated pet needs before it can be summoned again. Survives relogs and restarts. A Battle Pet Revival Scroll or /kspetadmin revive ends it early.
combatBalance.mortality.regenPerSecond2.0HP regenerated per second out of combat.
combatBalance.mortality.regenDelaySeconds10Seconds without damage before regeneration starts.
combatBalance.mortality.xpLossPercent0.0Percent (0 to 100) of the current level’s XP requirement lost on defeat. Never drops a level.
combatBalance.mortality.playerDamagefalsetrue: other players can hurt combat pets. The owner never can.

Only hostile NPCs (and other players with playerDamage) can hurt a combat pet; fall damage, drowning, suffocation, the owner and other pets cannot.

Recommended against AFK boss farming (from the 1.8.0 release notes):

"combatBalance": {
"damageThroughPipeline": true,
"requireOwnerActivity": true,
"ownerInactivitySeconds": 120,
"mortality": {
"enabled": true,
"baseHealth": 100.0,
"healthPerLevel": 5.0,
"tauntChance": 0.25,
"deathCooldownMinutes": 15,
"regenPerSecond": 2.0,
"regenDelaySeconds": 10,
"xpLossPercent": 0.0,
"playerDamage": false
}
}

Added in 1.9.0. The windows themselves are shown on UI Pages.

KeyDefaultEffect
ui.compendiumtruetrue: /kspet opens the Pet Compendium with the live 3D preview. false: the classic pet menu.
ui.lockedPets"visible"Pets a player does not own. "visible": dimmed, with name, base stats and a “How to get it” text. "hidden": shown as ??? until owned, without name, model or values.
ui.previewTilt12Camera tilt of the 3D preview in degrees.
ui.previewSpinSpeed18Auto-rotation of the 3D preview in degrees per second; 0 = only rotate by dragging.

Pet Compendium with lockedPets set to hidden

ui.lockedPets: "hidden": pets you do not own yet are listed as ”???”, without name, 3D model or values; only their rarity and the “How to get it” text are shown.

KeyDefaultEffect
hudPosition"top-left"HUD position for players who never picked their own: top-left, top-right, middle-left, middle-right, bottom-left, bottom-right
hudLayout"vertical"HUD layout for players who never picked their own: vertical or horizontal

Every player can set the position and layout of their pet HUD in the compendium header; that choice is stored per player and wins over the config. Players whose pet file was written by an older version already have the old default (top-left / vertical) saved in it, so a changed server default only reaches new players and players without a pet file.

These keys are in the shipped file but have no effect (the file’s _comment says so):

KeyNote
petDespawnOnDisconnectPets are always sent home when their owner logs out: a pet left behind would be saved with its chunk and come back as a frozen model.
xpSources.passivePerMinutePets earn no XP over time.

mods/kyuubisoft_pets/loot_luck_blacklist.json holds item ID patterns that the Loot Luck stat never doubles, for every player. The pet still collects the item and the player still gets it once. The shipped file is empty:

{
"patterns": []
}

Example with patterns:

{
"patterns": [
"Weapon_*",
"Armor_*",
"Ore_*",
"Ruby"
]
}

Pattern rules:

PatternMatchesExample
with ** stands for any characters; the whole item ID must matchOre_* hits every ID starting with Ore_; *_Spear every ID ending in _Spear
without *the item ID contains the textRuby hits every ID containing Ruby

Matching ignores upper and lower case; all other characters are taken literally. Duplicates are ignored.

Editing: the easiest way is the Blacklist section of the admin window (/kspetadmin lootluck): it shows how many items each pattern hits, saves at once and applies to the next pickup. If you edit the file by hand, run /kspetadmin reload afterwards. The blacklist has its own file so that the window’s saving never overwrites your manual edits in config.json.

To make a pet ignore items completely, use the player’s own pickup filter (see Collector Pets).


The stat table every pet rolls from, and the rules per rarity. The shipped file:

{
"maxSameType": 3,
"combatStatTypes": ["damage_bonus", "crit_chance", "max_health", "life_steal", "armor_bonus"],
"combatDefaults": {
"baseDamage": 8.0,
"damagePerLevel": 0.5,
"attackSpeed": 1.5,
"attackRange": 3.0,
"aggroRange": 15.0,
"leashDistance": 20.0
},
"statPool": [
{ "type": "damage_bonus", "displayName": "Damage", "minBase": 0.01, "maxBase": 0.08, "minPerLevel": 0.002, "maxPerLevel": 0.015 },
{ "type": "max_health", "displayName": "Max Health", "minBase": 2, "maxBase": 20, "minPerLevel": 1, "maxPerLevel": 5 },
{ "type": "pickup_radius", "displayName": "Pickup Range", "minBase": 0.3, "maxBase": 3.0, "minPerLevel": 0.05, "maxPerLevel": 0.5 },
{ "type": "xp_bonus", "displayName": "Pet XP", "minBase": 0.01, "maxBase": 0.15, "minPerLevel": 0.002, "maxPerLevel": 0.02 },
{ "type": "stamina_regen", "displayName": "Stamina Regen", "minBase": 0.3, "maxBase": 3.0, "minPerLevel": 0.1, "maxPerLevel": 0.6 },
{ "type": "mana_regen", "displayName": "Mana Regen", "minBase": 0.3, "maxBase": 3.0, "minPerLevel": 0.1, "maxPerLevel": 0.6 },
{ "type": "crit_chance", "displayName": "Crit Chance", "minBase": 0.01, "maxBase": 0.1, "minPerLevel": 0.002, "maxPerLevel": 0.015 },
{ "type": "armor_bonus", "displayName": "Armor", "minBase": 0.01, "maxBase": 0.1, "minPerLevel": 0.002, "maxPerLevel": 0.012 },
{ "type": "loot_luck", "displayName": "Loot Luck", "minBase": 0.02, "maxBase": 0.15, "minPerLevel": 0.003, "maxPerLevel": 0.02 },
{ "type": "thorns", "displayName": "Thorns", "minBase": 0.3, "maxBase": 3.0, "minPerLevel": 0.1, "maxPerLevel": 0.8 },
{ "type": "life_steal", "displayName": "Life Steal", "minBase": 0.005,"maxBase": 0.06, "minPerLevel": 0.001, "maxPerLevel": 0.01 }
],
"rarityRules": {
"uncommon": { "maxStats": 2, "unlockLevels": [1, 10], "qualityMin": 0.0, "qualityMax": 0.7 },
"rare": { "maxStats": 3, "unlockLevels": [1, 8, 16], "qualityMin": 0.0, "qualityMax": 0.85 },
"epic": { "maxStats": 4, "unlockLevels": [1, 6, 12, 20], "qualityMin": 0.0, "qualityMax": 1.0 },
"legendary": { "maxStats": 5, "unlockLevels": [1, 5, 10, 15, 25], "qualityMin": 0.0, "qualityMax": 1.2 }
}
}
KeyDefaultEffect
maxSameType3How often the same stat may appear on one pet. 1 forbids duplicates; values below 1 count as 1.
combatStatTypes5 statsThe stats combat pets may roll: their first stats, rerolls and every admin roll.
combatDefaultssee aboveCombat values for every combat pet type that does not set its own value in combatStats.
statPool11 statsThe stat table. type is the stat ID, displayName the fallback name when a language has no translation, minBase/maxBase the range of the value at level 1, minPerLevel/maxPerLevel the range of the growth per level.
rarityRules4 raritiesPer rarity: maxStats (number of stats), unlockLevels (one stat slot per entry, rolled when the pet reaches that level), qualityMin/qualityMax (where in the range a roll lands).

If the file cannot be read or has no stats, the plugin logs a warning and uses built-in defaults with the same values.

Percent stats are stored as fractions: 0.08 = 8 %.

Stat IDNameUnit
damage_bonusDamagefraction (percent)
xp_bonusPet XPfraction (percent)
crit_chanceCrit Chancefraction (percent)
armor_bonusArmorfraction (percent)
loot_luckLoot Luckfraction (percent)
life_stealLife Stealfraction (percent)
max_healthMax Healthhealth points
pickup_radiusPickup Rangeblocks
stamina_regenStamina Regenper second
mana_regenMana Regenper second
thornsThornsflat

What each stat does in game is explained on Collector Pets and Combat Pets.

  1. A stat type is picked at random from the table (combat pets: only combatStatTypes), skipping types the pet already has maxSameType times.
  2. A quality q is rolled between qualityMin and qualityMax of the pet’s rarity.
  3. Base = minBase + (maxBase - minBase) × q, per level = minPerLevel + (maxPerLevel - minPerLevel) × q (same q).
  4. Both values are clamped to the table range and rounded to 3 decimals.

The value at level L is base + perLevel × (L - 1), and 0 while L is below the stat’s unlock level.

Because of step 4, a qualityMax above 1.0 does not create values above the table. It makes rolls at the maximum more frequent: with legendary’s 1.2, about one roll in six lands exactly at the maximum.

A new pet rolls only the stats that unlock at level 1; the others are rolled when it reaches their unlock level. A pet type with a rarity that is not in rarityRules gets one stat at level 1.