Skip to main content

Configuration

The main configuration is in plugins/Pets/config.json.

Full Config Structure

{
"enabled": true,
"modules": {
"collector": true,
"combat": true,
"mount": true
},
"maxPetsPerPlayer": 5,
"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
},
"defaultFilterMode": "blacklist",
"defaultBlacklist": ["Dirt", "Sand", "Gravel", "Cobblestone"]
}

Field Reference

General

FieldTypeDefaultDescription
enabledbooleantrueMaster switch for the entire pet system
modules.collectorbooleantrueEnable pickup pets (follow + auto-collect)
modules.combatbooleantrueEnable combat pets (battle companions)
modules.mountbooleantrueEnable rideable mounts
maxPetsPerPlayerint5Maximum number of pets a player can own
petDespawnOnDisconnectbooleantrueRemove the pet NPC when the owner disconnects

Tick Intervals

FieldTypeDefaultDescription
followTickIntervalMsint2000How often the follow service checks pet distance (ms)
pickupTickIntervalMsint1000How often the pickup system scans for items (ms)
petTeleportDistanceint30Distance (blocks) before pet teleports to owner
autoSaveIntervalSecondsint300Auto-save interval for player data

HUD Settings

These are the server defaults. Players can override their HUD position and layout via the /kspet menu at any time.

FieldTypeDefaultDescription
hudPositionstring"top-left"Default position of the Pet Tracker HUD
hudLayoutstring"vertical"Default layout direction of the HUD

hudPosition values:

ValueDescription
top-leftUpper-left corner
top-rightUpper-right corner
middle-leftCenter-left edge
middle-rightCenter-right edge
bottom-leftLower-left corner
bottom-rightLower-right corner

hudLayout values:

ValueDescription
verticalPet info stacks vertically (default)
horizontalPet info lays out horizontally

Pickup Filter Defaults

FieldTypeDefaultDescription
defaultFilterModestring"blacklist"Default filter mode for new pets (blacklist or whitelist)
defaultBlackliststring[]["Dirt", "Sand", "Gravel", "Cobblestone"]Items blocked by default in blacklist mode

XP Sources

FieldTypeDefaultDescription
xpSources.mobKillint25XP per mob kill
xpSources.blockBreakint2XP per block broken
xpSources.craftingint10XP per item crafted
xpSources.itemPickupint2XP per item picked up by pet
xpSources.passivePerMinuteint1Passive XP per minute while pet is active

Pet Type Definitions

Pet types are defined as individual JSON files in plugins/Pets/pet-types/{module}/.

pet-types/
collector/ — Pickup Pets (summoned via Pet Eggs)
combat/ — Combat Pets (summoned via Battle Runes)
mount/ — Mounts (summoned via Mount Horns)

Adding a new pet type: drop a .json file into the matching subfolder. The module is auto-detected from the folder name if not set in the JSON.

Collector Pet (Pickup Pet)

{
"id": "wolf",
"displayName": "Wolf",
"entityTypeId": "Wolf_Black",
"modelScale": 0.25,
"followDistance": 3.0,
"followSpeed": 5.0,
"pickupRadius": 1.5,
"maxLevel": 50,
"baseXpPerLevel": 100,
"xpScaleFactor": 1.15,
"eggItemId": "Pet_Egg_Wolf",
"rarity": "uncommon",
"description": "A loyal wolf companion. Fast and agile."
}
FieldTypeRequiredDescription
idstringyesUnique identifier
displayNamestringyesName shown in UI
entityTypeIdstringyesHytale NPC entity type to spawn
modelScalefloatyesVisual scale of the NPC model
followDistancefloatyesDistance (blocks) the pet tries to stay from owner
followSpeedfloatyesMovement speed of the follow AI
pickupRadiusfloatyesRadius (blocks) for auto item collection
maxLevelintyesMaximum pet level
baseXpPerLevelintyesXP required for level 2
xpScaleFactorfloatyesMultiplier applied to XP requirement each level
eggItemIdstringnoItem ID for the summon egg (auto-generated as Pet_Egg_{Id} if omitted)
raritystringyesRarity tier (see below)
descriptionstringnoTooltip/UI description

Combat Pet

{
"id": "wolf_combat",
"displayName": "Kriegswolf",
"entityTypeId": "Wolf_Black",
"modelScale": 0.5,
"followDistance": 3.0,
"followSpeed": 6.0,
"maxLevel": 50,
"baseXpPerLevel": 120,
"xpScaleFactor": 1.15,
"rarity": "rare",
"description": "Ein treuer Kriegswolf. Kaempft an deiner Seite.",
"module": "combat",
"runeItemId": "Battle_Rune_Wolf",
"combatStats": {
"baseDamage": 8.0,
"damagePerLevel": 0.5,
"attackSpeed": 2.0,
"attackRange": 3.0,
"aggroRange": 15.0,
"leashDistance": 20.0,
"attackAnimation": "Bite",
"attackAnimationsId": "Wolf_Black_Default"
}
}

combatStats fields:

FieldTypeDescription
baseDamagefloatBase damage at level 1
damagePerLevelfloatAdditional damage gained per level
attackSpeedfloatAttacks per second
attackRangefloatMelee attack range (blocks)
aggroRangefloatRange at which the pet detects hostile targets
leashDistancefloatMax distance before the pet gives up a chase and returns
attackAnimationstringAnimation name played on attack
attackAnimationsIdstringAnimation set ID (entity-specific)

The module field must be "combat", or the file must be placed in the combat/ subfolder. The runeItemId is auto-generated as Battle_Rune_{Id} if omitted.

Mount

{
"id": "rex_cave_mount",
"displayName": "Hoehlen-Rex",
"entityTypeId": "Rex_Cave",
"modelScale": 1.2,
"maxLevel": 40,
"baseXpPerLevel": 180,
"xpScaleFactor": 1.18,
"rarity": "epic",
"description": "Ein gewaltiger Hoehlen-Rex.",
"module": "mount",
"hornItemId": "Mount_Horn_Rex_Cave",
"mountConfig": {
"mountType": "walk",
"mountYOffset": 3.5,
"speed": 1.5,
"baseHealth": 150
}
}

mountConfig fields:

FieldTypeDefaultDescription
mountTypestring"walk""walk", "fly", or "swim" -- determines the NPC motion controller
mountYOffsetfloat2.5Vertical offset of the rider above the mount
speedfloat1.5Speed multiplier
baseHealthfloat200Mount NPC health

The module field must be "mount", or the file must be placed in the mount/ subfolder. The hornItemId is auto-generated as Mount_Horn_{Id} if omitted.


Rarity Levels

RarityColorMax StatsUnlock LevelsQuality Range
uncommonGreen21, 100.0 - 0.7
rareBlue31, 8, 160.0 - 0.85
epicPurple41, 6, 12, 200.0 - 1.0
legendaryGold51, 5, 10, 15, 250.0 - 1.2

Stats unlock as the pet levels up. The first stat is always available at level 1. Additional stat slots unlock at the levels listed above based on rarity.

Quality Range determines how good or bad a stat roll can be. A quality of 0.0 = minimum possible value, 1.0 = maximum. Legendary pets can exceed the base maximum (up to 1.2x) for exceptionally strong rolls.


Stat Pool

All pets draw random stats from a shared pool of 11 stats. Each stat has a base value range (at level 1) and a per-level growth range.

Stat TypeDisplay NameBase RangePer-Level Range
damage_bonusDamage0.01 - 0.080.002 - 0.015
max_healthMax Health2 - 201 - 5
pickup_radiusPickup Range0.3 - 3.00.05 - 0.5
xp_bonusPet XP0.01 - 0.150.002 - 0.02
stamina_regenStamina Regen0.3 - 3.00.1 - 0.6
mana_regenMana Regen0.3 - 3.00.1 - 0.6
crit_chanceCrit Chance0.01 - 0.10.002 - 0.015
armor_bonusArmor0.01 - 0.10.002 - 0.012
loot_luckLoot Luck0.02 - 0.150.003 - 0.02
thornsThorns0.3 - 3.00.1 - 0.8
life_stealLife Steal0.005 - 0.060.001 - 0.01

Percentage stats (damage_bonus, xp_bonus, crit_chance, armor_bonus, loot_luck, life_steal) are stored as decimals (e.g., 0.08 = 8%).

Combat pets roll from a restricted pool: damage_bonus, crit_chance, max_health, life_steal, armor_bonus.

The same stat type can appear up to 3 times on a single pet.

Stat Mechanics

  • Reroll Scroll: Re-rolls both the stat type and value randomly. Uses Pet Reroll Scroll (pickup pets) or Battle Reroll Scroll (combat pets).
  • Refine Scroll: Keeps the same stat type but re-rolls the value. Uses Pet Refine Scroll (pickup pets) or Battle Refine Scroll (combat pets).
  • Effective value: baseValue + (perLevel * (currentLevel - 1)) (returns 0 if current level is below unlock level)

Auto-Generated Item Templates

When the plugin loads a custom pet type but cannot find its summon item (egg/rune/horn) in the server content, it automatically generates a JSON item template in plugins/Pets/item-templates/.

This is useful when adding new custom pet types:

  1. Create a pet type JSON in the appropriate pet-types/{module}/ folder
  2. Start the server — the plugin detects the missing item and generates a template
  3. Copy the generated template from item-templates/ to your server's Server/Item/Items/ folder
  4. Restart the server

The generated template includes correct translation properties, quality tier, model/texture paths, interactions, and tags matching the pet's module and rarity. A warning is logged for each generated template so they are easy to spot in the console.

If the item ID field (eggItemId, runeItemId, hornItemId) is omitted from the pet type JSON, the plugin auto-generates an ID based on the pet's ID:

ModulePatternExample
collectorPet_Egg_{Id}Pet_Egg_Frog_Green
combatBattle_Rune_{Id}Battle_Rune_Wolf_Combat
mountMount_Horn_{Id}Mount_Horn_Rex_Cave_Mount