YAML:
# ============================================================================
# X-Prison-Pets — main configuration
#
# Pets are pure items. Right-click a pet in hand to toggle it active, and use
# the Pet Upgrade / Pet Prestige buttons in /pets (or shift-right-click a held
# pet) to open its upgrade menu. All text is MiniMessage — gradients, hex and
# legacy '&' codes are all supported (https://docs.advntr.dev/minimessage/format.html).
#
# Permissions:
# xprison.pets.use open /pets and use pet items
# xprison.pets.admin /petsadmin
# xprison.pets.active.<n> raise a player's active-pet limit to <n>
# xprison.pets.limit.bypass unlimited active pets (same as xprison.pets.active.*)
# ============================================================================
# Layout version of this file. Do not edit — the addon uses it to migrate your
# settings when keys move between releases, and backs up any file it rewrites.
config-version: 2
general:
# How many pets a player may have active (boosting) at once. Raise per-player
# with the xprison.pets.active.<n> permission, or bypass entirely.
max-active-pets: 1
# Shown in place of level/cost values once a pet has reached its maximum level.
maxed-text: "<gradient:#f7971e:#ffd200>Maxed</gradient>"
# Hard ceiling on the COMBINED boost of all of a player's active pets, per boost
# target. -1 disables the ceiling. A value of 2.0 means pets can at most triple a
# gain (base + 2.0). Worth setting if you hand out xprison.pets.active.<n>.
max-total-boost: -1
# Falloff applied to each additional active pet after the strongest, per target.
# 1.0 = plain addition (every pet counts fully). 0.5 = the 2nd pet counts half,
# the 3rd a quarter, and so on. Pets are always ranked strongest-first, so a
# player's inventory order can never change their income.
diminishing-returns: 1.0
# Which gains pets are allowed to boost. Both lists were previously hard-coded.
boosts:
# Currency pets boost these ReceiveCauses. Default: mining income only.
# Valid: MINING, MINING_OTHERS, PAY, GIVE, REDEEM, LUCKY_BLOCK, REFUND, UNKNOWN
currency-causes:
- MINING
- MINING_OTHERS
# Pickaxe pets boost these exp sources. Default: mining-driven gains only, so
# pickaxe XP granted through the API by other addons is left untouched.
# Valid: MANUAL, AREA_ENCHANTS, AUTOMINER, API
pickaxe-xp-sources:
- MANUAL
- AREA_ENCHANTS
- AUTOMINER
pet-egg:
# Item used for Pet Eggs. Supports vanilla materials and ItemsAdder/Nexo/Oraxen ids.
material: GHAST_SPAWN_EGG
# Add an enchant glint to eggs.
glow: true
hatching:
# When true, opening an egg plays the animated hatching menu. When false the
# pet is granted instantly (no menu) and dropped if the inventory is full.
enabled: true
# Length of the hatch animation, in ticks (20 ticks = 1 second).
animation-ticks: 60
# Ticks to wait after the reveal before the menu closes itself (0 = stay open).
close-delay-ticks: 40
# Pane colours cycled during the spin. Any stained-glass (or other) materials.
frames:
- WHITE_STAINED_GLASS_PANE
- LIGHT_BLUE_STAINED_GLASS_PANE
- YELLOW_STAINED_GLASS_PANE
- LIME_STAINED_GLASS_PANE
- PINK_STAINED_GLASS_PANE
# Sound looped during the spin (or NONE).
animation-sound: BLOCK_NOTE_BLOCK_HAT
# Sound + particles on the final reveal (or NONE).
reveal-sound: ENTITY_PLAYER_LEVELUP
reveal-particles: TOTEM_OF_UNDYING
# ----------------------------------------------------------------------------
# Pet Fusion — combine duplicates into the next rarity up
#
# Duplicate pets are otherwise dead weight. A fusion consumes N pets of the SAME
# type and rarity, charges a cost, and rolls a chance to produce one pet a step
# up the rarity ladder (the order rarities are declared below).
#
# The pets consumed are always the player's weakest copies, so a failed fusion
# never eats their best one.
# ----------------------------------------------------------------------------
fusion:
enabled: true
# What the fused pet inherits: NONE | HIGHEST_LEVEL | AVERAGE_LEVEL
carry-over: NONE
# What happens to the inputs when the chance roll fails:
# CONSUME_INPUTS all inputs are lost
# REFUND_ONE all but one are lost
# KEEP_INPUTS nothing is lost (the cost is still charged)
on-fail: CONSUME_INPUTS
default:
# How many duplicates one fusion consumes (minimum 2).
amount: 5
# Success probability, 0.0–1.0.
chance: 1.0
cost-currency: tokens
# exp4j formula. 'tier' is the SOURCE rarity's position in the ladder,
# starting at 0 for the first rarity declared.
cost-formula: "50000 * pow(2, tier)"
# Per-rarity tuning, keyed by the rarity being consumed. Any field left out is
# inherited from 'default'. Use this to make the top of the ladder much harder.
overrides:
masterful:
amount: 8
chance: 0.35
# ----------------------------------------------------------------------------
# Permission defaults
#
# An addon has no plugin.yml, so without these every node would be unknown to
# Bukkit and default to op-only — ordinary players would be told they lack
# permission for /pets on a fresh install.
#
# Accepted values: true (everyone) | op (operators only) | false (nobody)
# An explicit grant or denial in LuckPerms always overrides these.
#
# Set 'use' to false if you would rather sell pet access as a rank perk, then
# grant xprison.pets.use to the ranks that should have it.
# ----------------------------------------------------------------------------
permissions:
# xprison.pets.use — open /pets, activate pets, open Pet Eggs.
use: true
# xprison.pets.admin — /petsadmin.
admin: op
# Level milestones and prestige rewards are defined per pet in pets.yml.
rewards:
# When false (default) each level milestone pays out at most ONCE per pet, tracked
# on the item itself. Prestiging resets a pet to level 1, so leaving this true lets
# a player re-cross the same milestones every prestige cycle and farm the rewards.
milestones-repeat-after-prestige: false
# Feedback played on pet upgrades / prestige. A value of NONE disables it.
effects:
upgrade-sound: ENTITY_EXPERIENCE_ORB_PICKUP
upgrade-particles: HAPPY_VILLAGER
prestige-sound: UI_TOAST_CHALLENGE_COMPLETE
prestige-particles: TOTEM_OF_UNDYING
# Interface sounds. Each has a name (or NONE), volume and pitch.
sounds:
gui-open:
name: BLOCK_CHEST_OPEN
volume: 0.5
pitch: 1.2
gui-click:
name: UI_BUTTON_CLICK
volume: 0.5
pitch: 1.0
purchase-success:
name: ENTITY_EXPERIENCE_ORB_PICKUP
volume: 0.7
pitch: 1.4
purchase-fail:
name: ENTITY_VILLAGER_NO
volume: 0.7
pitch: 1.0
# Fully configurable rarities. Add, rename or remove any entry — the id (the key)
# is what pets.yml boost bands, commands and items reference. Declaration order is
# the display order. Higher weight = more common; weight 0 = never rolled (admin-only).
rarities:
common: { name: "Common", color: "<gray>", weight: 600 }
rare: { name: "Rare", color: "<aqua>", weight: 250 }
legendary: { name: "Legendary", color: "<gold>", weight: 100 }
mythical: { name: "Mythical", color: "<light_purple>", weight: 40 }
masterful: { name: "Masterful", color: "<red>", weight: 9 }
pristine: { name: "Pristine", color: "<dark_red>", weight: 1 }
commands:
pets:
name: pets
aliases:
- pet
petsadmin:
name: petsadmin
aliases:
- petadmin
YAML:
# ============================================================================
# X-Prison-Pets — egg definitions
#
# Each key under 'eggs:' is a unique egg id. The FIRST egg defined is the
# default: it is what "/petsadmin give-egg <player>" hands out when no egg is
# named, and what an egg created before egg types existed is treated as.
#
# Give a specific egg with:
# /petsadmin give-egg <player> <egg> [rarity] [amount]
#
# Fields:
# name MiniMessage item name. %rarity% expands to the forced
# rarity's name (plus a trailing space), or nothing.
# material Icon. A vanilla material, PLAYER_HEAD (+ head-texture),
# or an ItemsAdder/Nexo/Oraxen id.
# head-texture Base64 skin value (used when material is PLAYER_HEAD).
# custom-model-data Optional CMD for resource-pack icons.
# glow Adds an enchant glint.
# pet-pool Pet type ids this egg can yield. Use ["*"] (or omit) for
# every pet in pets.yml.
# rarity-weights Per-rarity roll weights that OVERRIDE the global table in
# config.yml. Omit to inherit the global weights. Weight 0
# means this egg can never roll that rarity.
# show-odds List each possible rarity's exact chance in the tooltip.
# animation-ticks Hatch spin length for this egg, in ticks. -1 inherits
# pet-egg.hatching.animation-ticks from config.yml.
# ============================================================================
eggs:
# The everyday egg — inherits the global rarity table and can roll any pet.
basic:
name: "<gradient:#f7971e:#ffd200><bold>%rarity%Pet Egg</bold></gradient>"
material: GHAST_SPAWN_EGG
head-texture: ""
custom-model-data: 0
glow: true
pet-pool: ["*"]
rarity-weights: {}
show-odds: true
animation-ticks: -1
# A premium egg: Common and Rare are impossible, and the top tiers are far
# more likely than on the basic egg.
legendary_egg:
name: "<gradient:#c471ed:#f64f59><bold>%rarity%Legendary Egg</bold></gradient>"
material: DRAGON_EGG
head-texture: ""
custom-model-data: 0
glow: true
pet-pool: ["*"]
rarity-weights:
common: 0
rare: 0
legendary: 600
mythical: 300
masterful: 90
pristine: 10
show-odds: true
animation-ticks: 80
# A themed egg that only ever yields the Pickaxe Pet, on the global odds.
pickaxe_egg:
name: "<gradient:#f85032:#e73827><bold>%rarity%Pickaxe Egg</bold></gradient>"
material: NETHERITE_PICKAXE
head-texture: ""
custom-model-data: 0
glow: true
pet-pool:
- pickaxe_pet
rarity-weights: {}
show-odds: true
animation-ticks: -1
YAML:
# ============================================================================
# X-Prison-Pets — GUI layouts (MiniMessage)
#
# Every menu is fully configurable: slots, materials (vanilla or
# ItemsAdder/Nexo/Oraxen ids), names, lore, glow and custom_model_data.
# Item names and lore are rendered without the default italic — add <italic>
# yourself if you want it.
# ============================================================================
# The tooltip rendered on every pet item.
# Placeholders: %pet% %active% %description% %boost_display% %rarity_color%
# %rarity% %prestige% %prestige_boost% %level% %maxlevel% %boost% %progress%
pet-item:
name: "%pet% <dark_gray>(%active%<dark_gray>)"
lore:
- "<gray>Once equipped, %description%."
- ""
- "<aqua>Information:"
- "<gray>▸ Rarity: %rarity_color%%rarity%"
- "<gray>▸ Prestige: <white>%prestige% <gray>(%prestige_boost% Boost)"
- "<gray>▸ Level: <white>%level%<dark_gray>/<white>%maxlevel%"
- "<gray>▸ Boost: <green>%boost%x %boost_display%"
- "<gray>▸ Progress: <yellow>%progress%"
- ""
- "<yellow>Right-Click <gray>to toggle active."
- "<yellow>Shift-Right-Click <gray>to upgrade."
# /pets — informational catalog of every pet type, plus the Upgrade / Prestige buttons.
# Per pet the boost table is built from 'header' + a 'rarity-format' block per rarity.
# Placeholders: %pet% %description% %boost_display% %rarity_color% %rarity% %min% %max%
catalog:
title: "<dark_gray>Pets"
rows: 6
filler: BLACK_STAINED_GLASS_PANE
pet-slots: [10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25]
name: "%pet%"
header:
- "<gray>Once equipped, %description%."
- ""
- "<aqua>Boosts:"
rarity-format:
- "%rarity_color%%rarity%"
- "<gray>▸ %boost_display%s: <green>%min%x <gray>- <green>%max%x"
upgrades-item:
slot: 48
material: ANVIL
name: "<gradient:#f7971e:#ffd200><bold>Pet Upgrades</bold></gradient>"
lore:
- "<gray>Spend currency to raise a pet's"
- "<gray>level and boost power."
- ""
- "<yellow>Click <gray>to pick a pet to upgrade."
prestige-item:
slot: 50
material: NETHER_STAR
name: "<gradient:#c471ed:#f64f59><bold>Pet Prestiges</bold></gradient>"
lore:
- "<gray>Reset a maxed pet for a permanent"
- "<gray>boost multiplier that stacks forever."
- ""
- "<yellow>Click <gray>to pick a pet to prestige."
# Paging controls. The arrows are only drawn when there is a page to go to, so
# a server with few pets sees no change. Placeholders: %page% %pages%
previous-page:
slot: 45
material: ARROW
name: "<gray>« Previous Page"
next-page:
slot: 53
material: ARROW
name: "<gray>Next Page »"
page-info:
slot: 49
material: PAPER
name: "<gray>Page <white>%page%<dark_gray>/<white>%pages%"
# Only shown when fusion.enabled is true in config.yml.
fusion-item:
slot: 46
material: CRAFTING_TABLE
name: "<gradient:#00c6ff:#0072ff><bold>Pet Fusion</bold></gradient>"
lore:
- "<gray>Combine duplicate pets into"
- "<gray>a higher rarity."
- ""
- "<yellow>Click <gray>to open fusion."
# Pet picker opened by the Upgrade / Prestige buttons. Lists the pets you own; click
# one to open its upgrade or prestige menu. The click hint is appended to each pet's lore.
select:
title-upgrade: "<dark_gray>Select a Pet to Upgrade"
title-prestige: "<dark_gray>Select a Pet to Prestige"
rows: 6
filler: BLACK_STAINED_GLASS_PANE
pet-slots: [10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34]
click-hint-upgrade:
- ""
- "<yellow>Click <gray>to upgrade this pet."
- "<yellow>Shift-Click <gray>to toggle active."
click-hint-prestige:
- ""
- "<yellow>Click <gray>to prestige this pet."
- "<yellow>Shift-Click <gray>to toggle active."
# Paging controls — see the notes in the catalog section above.
previous-page:
slot: 45
material: ARROW
name: "<gray>« Previous Page"
next-page:
slot: 53
material: ARROW
name: "<gray>Next Page »"
page-info:
slot: 4
material: PAPER
name: "<gray>Page <white>%page%<dark_gray>/<white>%pages%"
empty:
slot: 22
material: BARRIER
name: "<red>No Pets Found"
lore:
- "<gray>You don't own any pets yet."
- "<gray>Open a Pet Egg to get started!"
back:
slot: 49
material: ARROW
name: "<gray>« Back"
# Upgrade menu for a single pet (levels only).
upgrade:
title: "<dark_gray>Pet Upgrade"
rows: 3
filler: BLACK_STAINED_GLASS_PANE
pet-slot: 4
buttons:
back:
slot: 18
material: ARROW
name: "<gray>« Back"
upgrade:
slot: 22
material: ANVIL
name: "<gradient:#f7971e:#ffd200><bold>Upgrade Pet</bold></gradient>"
lore:
- "<gray>Level: <white>%level%<dark_gray>/<white>%maxlevel%"
- "<gray>Boost: <green>%boost%x %boost_display%"
- "<gray>Next level cost: <white>%next_cost% %currency%"
- ""
- "<gray>Bulk Upgrade <dark_gray>(Right-Click)<gray>:"
- "<gray>▸ Levels: <white>%bulk_levels%"
- "<gray>▸ Cost: <white>%bulk_cost% %currency%"
- ""
- "<yellow>Left-Click: <gray>buy one level"
- "<yellow>Right-Click: <gray>buy as many as you can"
# Prestige menu for a single pet (max-out + prestige).
prestige:
title: "<dark_gray>Pet Prestige"
rows: 3
filler: BLACK_STAINED_GLASS_PANE
pet-slot: 4
buttons:
back:
slot: 18
material: ARROW
name: "<gray>« Back"
prestige:
slot: 22
material: NETHER_STAR
name: "<gradient:#c471ed:#f64f59><bold>Max Level & Prestige</bold></gradient>"
lore:
- "<gray>Prestige: <white>%prestige%<dark_gray>/<white>%max_prestige%"
- "<gray>Prestige boost: <light_purple>%prestige_boost%"
- ""
- "<gray>Buys all levels to max and prestiges,"
- "<gray>repeating until you run out of currency"
- "<gray>or reach max prestige."
- ""
- "<gray>Next max-out cost: <white>%max_cost% %currency%"
- ""
- "<yellow>Click <gray>to max level & prestige!"
# Pet Fusion menu — one entry per group of duplicates you own. Groups that are
# not yet fusable are still listed, showing how many more you need.
# Placeholders: %pet% %rarity% %rarity_color% %next_rarity% %next_rarity_color%
# %owned% %required% %missing% %chance% %cost% %currency%
fusion:
title: "<dark_gray>Pet Fusion"
rows: 6
filler: BLACK_STAINED_GLASS_PANE
pet-slots: [10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34]
name: "%rarity_color%%rarity% <reset>%pet%"
# Shown when you have enough duplicates and can pay.
lore-ready:
- "<gray>Combine <white>%required%x <gray>into <white>1x %next_rarity_color%%next_rarity%<gray>."
- ""
- "<gray>▸ Owned: <white>%owned%<dark_gray>/<white>%required%"
- "<gray>▸ Success chance: <yellow>%chance%"
- "<gray>▸ Cost: <white>%cost% %currency%"
- ""
- "<yellow>Click <gray>to fuse!"
# Shown when you do not yet own enough duplicates.
lore-not-enough:
- "<gray>Combine <white>%required%x <gray>into <white>1x %next_rarity_color%%next_rarity%<gray>."
- ""
- "<gray>▸ Owned: <white>%owned%<dark_gray>/<white>%required%"
- "<gray>▸ Cost: <white>%cost% %currency%"
- ""
- "<red>Need <white>%missing%<red> more."
# Shown for a group already at the top of the rarity ladder (it is listed but not
# clickable, so a player holding only max-rarity duplicates knows why).
lore-max-rarity:
- "<gray>Owned: <white>%owned%"
- ""
- "<yellow>Already at the highest rarity."
# Shown when you have the duplicates but not the currency.
lore-cannot-afford:
- "<gray>Combine <white>%required%x <gray>into <white>1x %next_rarity_color%%next_rarity%<gray>."
- ""
- "<gray>▸ Owned: <white>%owned%<dark_gray>/<white>%required%"
- "<gray>▸ Success chance: <yellow>%chance%"
- "<gray>▸ Cost: <red>%cost% %currency%"
- ""
- "<red>You cannot afford this."
empty:
slot: 22
material: BARRIER
name: "<red>Nothing to Fuse"
lore:
- "<gray>You need duplicate pets of the"
- "<gray>same type and rarity to fuse."
previous-page:
slot: 45
material: ARROW
name: "<gray>« Previous Page"
next-page:
slot: 53
material: ARROW
name: "<gray>Next Page »"
page-info:
slot: 4
material: PAPER
name: "<gray>Page <white>%page%<dark_gray>/<white>%pages%"
back:
slot: 49
material: ARROW
name: "<gray>« Back"
# The hatching animation menu (used when pet-egg.hatching.enabled is true).
hatching:
title: "<gradient:#f7971e:#ffd200>Hatching...</gradient>"
filler: BLACK_STAINED_GLASS_PANE
pet-slot: 13
# The centre item's name while the egg spins.
spinner-name: "<yellow>Hatching..."
# The Pet Egg item. Each egg's NAME and icon come from eggs.yml; this section
# styles the shared tooltip body. The reward and rarity lists are auto-filled
# from the egg's own pet pool and rarity weights.
egg-item:
rewards-header: "<green>Possible Rewards:"
reward-line: "<gray>▸ %pet%"
rarities-header: "<green>Possible Rarities:"
# Used when the egg has show-odds: false, or for a forced-rarity egg.
rarity-line: "<gray>▸ %rarity_color%%rarity%"
# Used when the egg has show-odds: true. %chance% is that rarity's real
# probability for THIS egg, e.g. "60%", "9.0%", "0.10%".
rarity-odds-line: "<gray>▸ %rarity_color%%rarity% <dark_gray>(<white>%chance%<dark_gray>)"
footer:
- ""
- "<yellow>Right-click to open!"
YAML:
# ============================================================================
# X-Prison-Pets — messages (MiniMessage; legacy '&' codes also supported)
# ============================================================================
prefix: "<dark_gray>[<gradient:#f7971e:#ffd200>Pets</gradient><dark_gray>] <reset>"
messages:
# ── General ────────────────────────────────────────────────────────────────
no_permission: "<red>You don't have permission to do that."
player_not_found: "<red>Player '<white>%player%<red>' is not online."
unknown_pet_type: "<red>Unknown pet type '<white>%type%<red>'. See pets.yml for valid ids."
unknown_rarity: "<red>Unknown rarity '<white>%rarity%<red>'."
# %value% — a give-egg token that matched neither an egg id, a rarity nor a number.
unknown_egg_or_rarity: "<red>'<white>%value%<red>' is not a known egg, rarity or amount."
no_eggs_defined: "<red>No eggs are defined in eggs.yml."
reloaded: "<green>Pets configuration reloaded."
usage: "<gray>Usage: <white>%usage%"
random_rarity: "Random"
# ── Eggs ───────────────────────────────────────────────────────────────────
# %color%, %rarity%, %pet%
egg_hatched: "<green>Your egg hatched into a %color%%rarity% <reset>%pet%<green>!"
# ── Activating pets ────────────────────────────────────────────────────────
# %pet%
pet_activated: "<green>Activated <reset>%pet%<green>."
pet_deactivated: "<gray>Deactivated <reset>%pet%<gray>."
# %limit%
active_limit_reached: "<red>You can only have <white>%limit%<red> active pet(s). Deactivate one first."
# ── Upgrades ───────────────────────────────────────────────────────────────
# %pet%, %level%
upgrade_success: "<green>Upgraded <reset>%pet%<green> to level <white>%level%<green>."
# %pet%, %levels%, %level%
upgrade_bulk_success: "<green>Bought <white>%levels%<green> levels — <reset>%pet%<green> is now level <white>%level%<green>."
# %currency%
upgrade_insufficient: "<red>You can't afford that upgrade (need more <white>%currency%<red>)."
upgrade_max_level: "<yellow>That pet is already at max level. Prestige it to grow further!"
# %pet%, %levels%, %prestiges%
max_out_done: "<green>Maxed <reset>%pet%<green>: bought <white>%levels%<green> levels and <white>%prestiges%<green> prestige(s)."
max_out_none: "<yellow>Not enough currency to buy any levels."
# ── Pet XP (pets that level themselves while you mine) ─────────────────────
# %pet%, %levels%, %level%, %maxlevel% — set to "" to silence.
pet_xp_level_up: "<green>Your <reset>%pet%<green> reached level <white>%level%<dark_gray>/<white>%maxlevel%<green>!"
# ── Fusion ─────────────────────────────────────────────────────────────────
# %pet%, %color%, %rarity%
fusion_success: "<green>Fusion succeeded! You received a %color%%rarity% <reset>%pet%<green>."
# %pet%, %consumed%
fusion_failed: "<red>The fusion failed — <white>%consumed%<red> pet(s) were consumed."
# %required%
fusion_not_enough: "<red>You need <white>%required%<red> matching pets to fuse."
# %currency%
fusion_insufficient: "<red>You can't afford that fusion (need more <white>%currency%<red>)."
fusion_no_next_rarity: "<yellow>That pet is already at the highest rarity."
fusion_disabled: "<red>Pet fusion is disabled on this server."
# ── Admin ──────────────────────────────────────────────────────────────────
# %amount%, %player%, %pet%, %color%, %rarity%
admin_gave_pet: "<green>Gave <white>%amount%x <green>%color%%rarity% <reset>%pet%<green> to <white>%player%<green>."
# %amount%, %player%, %egg%, %color%, %rarity%
admin_gave_egg: "<green>Gave <white>%amount%x <green>%color%%rarity% <green>%egg% to <white>%player%<green>."
# %amount%, %color%, %rarity%, %pet%
received_pet: "<gray>You received <white>%amount%x <gray>%color%%rarity% <reset>%pet%<gray> from an administrator!"
# Admin help (shown with no prefix).
admin_help_title: "<gradient:#f7971e:#ffd200><bold>Pets Admin</bold></gradient>"
admin_help_give: "<gray>/petsadmin give <white><player> <type> <rarity> [amount]"
admin_help_give_egg: "<gray>/petsadmin give-egg <white><player> [egg] [rarity] [amount]"
admin_help_reload: "<gray>/petsadmin reload"
YAML:
# ============================================================================
# X-Prison-Pets — pet definitions
#
# Each key under 'pets:' is a unique pet type id (lowercase, digits, underscore).
#
# A pet has ONE boost target and, per rarity, a min->max boost band. The live
# boost scales from `min` (level 1) to `max` (max level), then a permanent
# prestige multiplier is applied on top:
#
# levelValue = min + (max - min) * (level - 1) / (maxLevel - 1)
# effectiveBoost = levelValue * (1 + prestige * per-prestige-percent)
#
# Currency pets boost the currency you earn WHILE MINING (the pickaxe pet grants
# bonus pickaxe XP per block). Keep the description wording in step with that.
#
# Fields:
# display-name MiniMessage pet name (gradients / hex / '&' supported).
# description One-line MiniMessage phrase, slotted into "Once equipped, ...".
# boost-target "pickaxe_xp", or a currency name (e.g. tokens/gems/money).
# boost-display What the boost is called in tooltips (e.g. "Token").
# material Icon. PLAYER_HEAD (+ head-texture), a vanilla material,
# or an ItemsAdder/Nexo/Oraxen id.
# head-texture Base64 skin value (used when material is PLAYER_HEAD).
# custom-model-data Optional CMD for resource-pack icons.
# max-level Level cap before the pet can prestige.
# max-prestige How many times the pet can prestige.
# per-prestige-percent Permanent boost added per prestige (0.25 = +25%).
# cost-currency Currency spent to upgrade this pet's level.
# cost-formula exp4j formula (variable: level) = cost to buy the NEXT level.
# weight Relative chance of this pet being picked once an egg has rolled a
# rarity. All pets default to 100, i.e. an even split. Halve it to make
# a pet twice as rare as its siblings; set 0 to keep it out of eggs
# entirely (admin-give only).
# rarities Per-rarity { min, max } boost band, keyed by rarity id.
# xp Optional. Lets the pet earn levels by MINING as well as by
# purchase. Omit (or enabled: false) to keep it purchase-only.
# enabled turn mined XP on for this pet
# level-source PURCHASE | XP | BOTH (default BOTH)
# per-block XP granted per block mined
# rarity-multiplier scale per-block by the pet's rarity rank
# formula exp4j (variable: level) = XP for the NEXT level
# milestones Optional. <level>: { commands, messages, sound } paid out the
# first time the pet reaches that level. Placeholders: %player%
# %pet% %rarity% %level% %prestige% %threshold%.
# prestige-rewards Optional. Same shape, keyed by prestige number.
# ============================================================================
pets:
token_pet:
display-name: "<gradient:#f7971e:#ffd200>Token Pet</gradient>"
description: "increases the <yellow>Tokens</yellow><gray> you earn while mining"
boost-target: tokens
boost-display: "Token"
material: PLAYER_HEAD
head-texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjA4OGYyZWI4NjI4YzRjOWE5MTM1MDYzNjc2NmRlYTIyY2Q2ZmRlODI0MGM2NGI0M2EyY2NmZmJiYjM2OTI4ZCJ9fX0="
custom-model-data: 0
max-level: 40
max-prestige: 10
per-prestige-percent: 0.25
cost-currency: tokens
cost-formula: "5000 * pow(1.18, level)"
weight: 100
# This pet also levels itself while you mine, alongside paid upgrades.
xp:
enabled: true
level-source: BOTH
per-block: 1.0
rarity-multiplier: true
formula: "250 * pow(1.14, level)"
# Paid out the first time this pet reaches each level.
milestones:
10:
messages:
- "<green>Your <reset>%pet%<green> reached level <white>%level%<green>!"
sound: ENTITY_PLAYER_LEVELUP
25:
commands:
- "tokens give %player% 25000"
messages:
- "<gold>Milestone! <gray>+25,000 Tokens for reaching level <white>%threshold%<gray>."
sound: UI_TOAST_CHALLENGE_COMPLETE
prestige-rewards:
1:
messages:
- "<light_purple>First prestige on your <reset>%pet%<light_purple>!"
sound: UI_TOAST_CHALLENGE_COMPLETE
rarities:
common: { min: 0.045, max: 0.19 }
rare: { min: 0.085, max: 0.255 }
legendary: { min: 0.145, max: 0.34 }
mythical: { min: 0.205, max: 0.425 }
masterful: { min: 0.265, max: 0.56 }
pristine: { min: 0.405, max: 0.9 }
money_pet:
display-name: "<gradient:#56ab2f:#a8e063>Money Pet</gradient>"
description: "increases the <green>Money</green><gray> you earn while mining"
boost-target: money
boost-display: "Money"
material: PLAYER_HEAD
head-texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjdmOGQ4YzM5Zjk5MjFhNjRkN2I3NTVkZTMyMmU0NDFmZGVkNGI3NzVhNzY1N2UwYjMxOTZiNmZkYTg2MzY0NiJ9fX0="
custom-model-data: 0
max-level: 40
max-prestige: 10
per-prestige-percent: 0.25
cost-currency: money
cost-formula: "10000 * pow(1.18, level)"
rarities:
common: { min: 0.05, max: 0.20 }
rare: { min: 0.09, max: 0.27 }
legendary: { min: 0.15, max: 0.36 }
mythical: { min: 0.21, max: 0.45 }
masterful: { min: 0.28, max: 0.60 }
pristine: { min: 0.42, max: 0.95 }
gem_pet:
display-name: "<gradient:#00c6ff:#0072ff>Gem Pet</gradient>"
description: "increases the <aqua>Gems</aqua><gray> you earn while mining"
boost-target: gems
boost-display: "Gem"
material: PLAYER_HEAD
head-texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTBkZDIwZDI5ZDc3NmI3OWU0ODUyMDBhYmVkY2M2ZDk0YzExYmQ0Y2E1YjE0OWM2MGE0MDQxYzQ2NjhiYjZhOCJ9fX0="
custom-model-data: 0
max-level: 40
max-prestige: 10
per-prestige-percent: 0.25
cost-currency: gems
cost-formula: "1000 * pow(1.18, level)"
rarities:
common: { min: 0.31, max: 0.6 }
rare: { min: 0.36, max: 0.7 }
legendary: { min: 0.41, max: 0.8 }
mythical: { min: 0.46, max: 0.9 }
masterful: { min: 0.51, max: 1.1 }
pristine: { min: 0.71, max: 1.7 }
pickaxe_pet:
display-name: "<gradient:#f85032:#e73827>Pickaxe Pet</gradient>"
description: "boosts all <red>Pickaxe XP</red><gray> you gain while mining"
boost-target: pickaxe_xp
boost-display: "Pickaxe XP"
material: PLAYER_HEAD
head-texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGQzMTZhNjQwOTlkODk2ZjY2OWQwZjA4ODUyMDIxN2E4M2RlY2Q0YTNiNjdlNTdhZjg5YjMzZDIwYzMyMWYzNCJ9fX0="
custom-model-data: 0
max-level: 100
max-prestige: 15
per-prestige-percent: 0.25
cost-currency: tokens
cost-formula: "25000 * pow(1.16, level)"
rarities:
common: { min: 0.10, max: 0.50 }
rare: { min: 0.20, max: 0.75 }
legendary: { min: 0.35, max: 1.00 }
mythical: { min: 0.55, max: 1.25 }
masterful: { min: 0.80, max: 1.50 }
pristine: { min: 1.10, max: 1.80 }
