Compatibility
Minecraft: Java Edition
Platforms
Supported environments
Creators
Details
Cobblemon Boss User Guide
pack.mcmeta
data/
└─ cobblemonboss/
└─ bosses/
├─ blastoise.json
├─ charizard.json
└─ venusaur.json
File Structure
This datapack includes the following files:
pack.mcmetadata/cobblemonboss/bosses/blastoise.jsondata/cobblemonboss/bosses/charizard.jsondata/cobblemonboss/bosses/venusaur.json
Where:
pack.mcmeta: datapack metadata fileblastoise.json: Blastoise boss datacharizard.json: Charizard boss datavenusaur.json: Venusaur boss data
1. Beginner Guide to Boss Data Packs
1.1 What is this configuration for?
A Boss JSON defines the complete data for one Boss Pokémon.
It mainly controls the following:
- Which Pokémon the Boss is
- What its displayed name is
- Where and when it can spawn
- What rewards are given after defeating it
- What punishments happen after losing
- What moves, stats, and battle mode it uses in combat
1.2 Recommended way to understand it
When creating a Boss, the most important thing is to think about these 4 parts first:
1) Who it is
unique_idspecies_iddisplay_name
2) How it spawns
spawn_rule
3) What happens when players win or lose
reward_rulepunish_rule
4) How it fights
random_configsmovescustom_battle_statsphase_skillsbattle_modeactions_per_turn
1.3 Most basic filling suggestions
Required
unique_idspecies_idrandom_configs
Recommended
display_namemoves
Optional, depending on your needs
spawn_rulereward_rulepunish_ruleeffort_valuescustom_battle_statsphase_skillsbattle_modeactions_per_turnheld_itemsnatureabilityform
1.4 Standard template
{
"unique_id": "blastoise_water_boss",
"display_name": "§9Boss",
"species_id": "cobblemon:blastoise",
"spawn_rule": {
"spawn_locations": ["cave"],
"spawn_times": ["all_day"],
"spawn_biomes": [
"minecraft:dripstone_caves",
"#minecraft:is_ocean"
],
"spawn_weight": 4
},
"reward_rule": {
"reward_items": [
{
"item_id": "cobblemon:rare_candy",
"count": 10
},
{
"item_id": "cobblemon:rare_candy",
"count": 10,
"chance": 0.1
},
{
"command": "givepokemonother {player} squirtle",
"chance": 0.1
},
{
"command": "givepokemonother {player} squirtle"
}
]
},
"punish_rule": {
"punish_items": [
{
"level": 5,
"chance": 1
},
{
"evs": {
"hp": 1,
"attack": 1,
"defense": 1,
"special_attack": 1,
"special_defense": 1,
"speed": 1
},
"chance": 1
},
{
"ivs": {
"hp": 1,
"attack": 1,
"defense": 1,
"special_attack": 1,
"special_defense": 1,
"speed": 1
},
"chance": 0.01
},
{
"command": "effect give {player} minecraft:hunger 60 0 true",
"chance": 1
}
]
},
"random_configs": [
{
"shiny": false,
"effort_values": {
"hp": 252,
"attack": 0,
"defense": 252,
"special_attack": 0,
"special_defense": 4,
"speed": 0
},
"custom_battle_stats": {
"hp": {
"value": 5000,
"mode": "exact"
},
"attack": {
"value": 1000,
"mode": "maximum"
},
"defense": {
"value": 1000,
"mode": "maximum"
},
"special_attack": {
"value": 1000,
"mode": "maximum"
},
"special_defense": {
"value": 1000,
"mode": "maximum"
},
"speed": {
"value": 1000,
"mode": "minimum"
}
},
"battle_mode": "6v1",
"actions_per_turn": 6,
"moves": ["scald", "icywind", "yawn", "protect"],
"nature": "bold",
"ability": "torrent",
"form": "",
"held_items": ["cobblemon:leftovers"],
"phase_skills": [
{
"hp_percent": 90,
"moves": ["scald", "icywind", "yawn", "toxic"]
},
{
"hp_percent": 80,
"moves": ["waterpulse", "flashcannon", "rest", "protect"]
},
{
"hp_percent": 70,
"moves": ["surf", "darkpulse", "irondefense", "amnesia"]
},
{
"hp_percent": 60,
"moves": ["hydropump", "aurasphere", "protect", "raindance"]
},
{
"hp_percent": 50,
"moves": ["hydrocannon", "blizzard", "shellsmash", "focusenergy"]
}
]
},
{
"shiny": false,
"effort_values": {
"hp": 252,
"attack": 0,
"defense": 252,
"special_attack": 0,
"special_defense": 4,
"speed": 0
},
"custom_battle_stats": {
"hp": {
"value": 5000,
"mode": "exact"
},
"attack": {
"value": 1000,
"mode": "maximum"
},
"defense": {
"value": 1000,
"mode": "maximum"
},
"special_attack": {
"value": 1000,
"mode": "maximum"
},
"special_defense": {
"value": 1000,
"mode": "maximum"
},
"speed": {
"value": 1000,
"mode": "minimum"
}
},
"battle_mode": "5v1",
"actions_per_turn": 5,
"moves": ["rapidspin", "brine", "toxic", "yawn"],
"nature": "bold",
"ability": "torrent",
"form": "",
"held_items": ["cobblemon:leftovers"],
"phase_skills": [
{
"hp_percent": 90,
"moves": ["rapidspin", "brine", "toxic", "yawn"]
},
{
"hp_percent": 80,
"moves": ["waterpulse", "flashcannon", "rest", "protect"]
},
{
"hp_percent": 70,
"moves": ["surf", "dragonpulse", "raindance", "irondefense"]
},
{
"hp_percent": 60,
"moves": ["hydropump", "darkpulse", "protect", "haze"]
},
{
"hp_percent": 50,
"moves": ["hydrocannon", "focusblast", "shellsmash", "focusenergy"]
}
]
},
{
"shiny": false,
"effort_values": {
"hp": 252,
"attack": 0,
"defense": 0,
"special_attack": 252,
"special_defense": 4,
"speed": 0
},
"custom_battle_stats": {
"hp": {
"value": 5000,
"mode": "exact"
},
"attack": {
"value": 1000,
"mode": "maximum"
},
"defense": {
"value": 1000,
"mode": "maximum"
},
"special_attack": {
"value": 1000,
"mode": "maximum"
},
"special_defense": {
"value": 1000,
"mode": "maximum"
},
"speed": {
"value": 1000,
"mode": "minimum"
}
},
"battle_mode": "4v1",
"actions_per_turn": 4,
"moves": ["hydropump", "flashcannon", "shellsmash", "focusenergy"],
"nature": "modest",
"ability": "torrent",
"form": "",
"held_items": ["cobblemon:wise_glasses"],
"phase_skills": [
{
"hp_percent": 90,
"moves": ["icywind", "darkpulse", "yawn", "taunt"]
},
{
"hp_percent": 80,
"moves": ["scald", "flashcannon", "rest", "protect"]
},
{
"hp_percent": 70,
"moves": ["surf", "icebeam", "shellsmash", "raindance"]
},
{
"hp_percent": 60,
"moves": ["hydropump", "dragonpulse", "protect", "focusenergy"]
},
{
"hp_percent": 50,
"moves": ["hydrocannon", "aurasphere", "blizzard", "nastyplot"]
}
]
}
]
}
2. Top-level field descriptions
unique_id
Purpose The unique ID of the Boss.
How to understand it This is the internal name used to distinguish this Boss from other Bosses.
Recommendation Required.
Example
"unique_id": "blastoise_dripstone_caves_boss"
Suggestions
- Use lowercase English letters and underscores
- Do not use the same ID as another Boss
display_name
Purpose The name displayed to players.
How to understand it This is the name players will see in-game.
Recommendation Recommended.
Example
"display_name": "§9Boss"
Notes
- Color codes can be used
- Useful for making the Boss name more eye-catching
species_id
Purpose The Pokémon species ID of the Boss.
How to understand it This determines which Pokémon species the Boss actually is.
Recommendation Required.
Example
"species_id": "cobblemon:blastoise"
spawn_rule
Purpose Defines the spawning rules of the Boss.
How to understand it Controls where, when, and in which biomes the Boss can spawn.
Recommendation Optional.
Example
"spawn_rule": { ... }
reward_rule
Purpose Defines the rewards after defeating the Boss.
Recommendation Optional.
Example
"reward_rule": { ... }
punish_rule
Purpose Defines the punishments after losing the challenge.
Recommendation Optional.
Example
"punish_rule": { ... }
random_configs
Purpose A list of random battle configurations for the Boss.
How to understand it The same Boss can have multiple variants, and one will be randomly chosen when it spawns.
Recommendation Required.
Example
"random_configs": [ ... ]
3. spawn_rule Spawn Rules
spawn_locations
Purpose Restricts the type of location where the Boss can spawn.
Recommendation Optional.
Example
"spawn_locations": ["cave"]
Available values
| Value | Meaning |
|---|---|
land |
Land |
water_surface |
Water surface |
underwater |
Underwater |
cave |
Cave |
sky |
Sky |
lava |
Lava area |
spawn_times
Purpose Restricts the time period when the Boss can spawn.
Recommendation Optional.
Example
"spawn_times": ["all_day"]
or
"spawn_times": ["night", "midnight"]
Time range rules used by the mod
The time ranges are determined by the server world time in Minecraft.
The current implementation uses this logic:
long dayTime = level.getDayTime() % 24000;
if (dayTime >= 0 && dayTime < 3000) {
return early_morning;
} else if (dayTime >= 3000 && dayTime < 6000) {
return morning;
} else if (dayTime >= 6000 && dayTime < 12000) {
return noon;
} else if (dayTime >= 12000 && dayTime < 15000) {
return afternoon;
} else if (dayTime >= 15000 && dayTime < 18000) {
return dusk;
} else if (dayTime >= 18000 && dayTime < 21000) {
return night;
} else {
return midnight;
}
That means the actual time mapping is:
| Value | Tick range | Meaning |
|---|---|---|
all_day |
special value | Can spawn at any time |
early_morning |
0 - 2999 |
Early morning |
morning |
3000 - 5999 |
Morning |
noon |
6000 - 11999 |
Noon / daytime |
afternoon |
12000 - 14999 |
Afternoon |
dusk |
15000 - 17999 |
Dusk |
night |
18000 - 20999 |
Night |
midnight |
21000 - 23999 |
Midnight |
Important notes about spawn_times
- A Minecraft day is
24000ticks - The mod checks the current time by using
level.getDayTime() % 24000 - Writing multiple values means multiple time periods are allowed
all_dayis a special value that means no time restriction- The code itself returns one of the real time segments such as
morning,night, ormidnight all_dayis usually handled inside the spawn rule check logic as “always allowed”
Examples
Only spawn at night:
"spawn_times": ["night"]
Only spawn late at night:
"spawn_times": ["midnight"]
Spawn during both dusk and night:
"spawn_times": ["dusk", "night"]
Spawn at any time:
"spawn_times": ["all_day"]
spawn_biomes
Purpose Restricts the biomes where the Boss can spawn.
Recommendation Optional.
Example
"spawn_biomes": [
"minecraft:dripstone_caves",
"#minecraft:is_ocean"
]
Two ways to write it
Normal biome:
"minecraft:dripstone_caves"
Biome tag:
"#minecraft:is_ocean"
Notes
- Writing a biome ID means it only spawns in that biome
- Writing a biome tag starting with
#means it can spawn in all biomes under that tag
spawn_weight
Purpose Controls the spawn weight of this Boss.
Recommendation Optional.
Example
"spawn_weight": 4
Notes
- Usually use a positive integer
- When multiple Bosses are considered together, a larger value usually means a higher chance to be selected
4. reward_rule Reward Rules
reward_items
Purpose The list of reward entries.
Recommendation Fill this if you want rewards.
Example
"reward_items": [
{
"item_id": "cobblemon:rare_candy",
"count": 10
}
]
Fields of a single reward entry
item_id
Purpose The reward item.
Example
{
"item_id": "cobblemon:rare_candy"
}
Notes
- Use this when you want to give an item
count
Purpose The number of items.
Example
{
"item_id": "cobblemon:rare_candy",
"count": 10
}
Notes
- Optional
- If omitted, it is usually treated as 1
command
Purpose Executes a command as a reward.
Example
{
"command": "givepokemonother {player} squirtle"
}
Notes
- Useful for giving Pokémon, titles, points, currency, and more
- Supports the
{player}placeholder
chance
Purpose The trigger probability of the reward.
Example
{
"item_id": "cobblemon:rare_candy",
"count": 10,
"chance": 0.1
}
Notes
1means 100%0.5means 50%0.1means 10%
Common reward examples
Item reward:
{
"item_id": "cobblemon:rare_candy",
"count": 10
}
Chance-based item reward:
{
"item_id": "cobblemon:rare_candy",
"count": 10,
"chance": 0.1
}
Command reward:
{
"command": "givepokemonother {player} squirtle"
}
Chance-based command reward:
{
"command": "givepokemonother {player} squirtle",
"chance": 0.1
}
5. punish_rule Punishment Rules
punish_items
Purpose The list of punishment entries.
Recommendation Fill this if you want punishments.
Example
"punish_items": [
{
"level": 5,
"chance": 1
}
]
Fields of a single punishment entry
level
Purpose Reduces levels.
Example
{
"level": 5,
"chance": 1
}
evs
Purpose Reduces effort values.
Example
{
"evs": {
"hp": 1,
"attack": 1
},
"chance": 1
}
Available keys
hpattackdefensespecial_attackspecial_defensespeed
Notes
- Only write the stats you want to reduce
- You do not need to write all six stats
ivs
Purpose Reduces individual values.
Example
{
"ivs": {
"hp": 1,
"speed": 1
},
"chance": 0.01
}
Available keys
hpattackdefensespecial_attackspecial_defensespeed
Notes
- Same here, only write the stats you want to reduce
command
Purpose Executes a command as a punishment.
Example
{
"command": "effect give {player} minecraft:hunger 60 0 true",
"chance": 1
}
Notes
- Useful for negative effects, taking money, teleporting, broadcasting messages, and more
- Supports the
{player}placeholder
chance
Purpose The trigger probability of the punishment.
Example
{
"level": 5,
"chance": 1
}
Notes
1means it always triggers0.01means a 1% chance
6. A single random_configs battle configuration
shiny
Purpose Whether the Boss is shiny.
Example
"shiny": false
Recommendation Recommended.
effort_values
Purpose The EV spread of the Boss.
Example
"effort_values": {
"hp": 252,
"attack": 0,
"defense": 252,
"special_attack": 0,
"special_defense": 4,
"speed": 0
}
Available keys
hpattackdefensespecial_attackspecial_defensespeed
Notes
- Used to define whether the Boss is bulky, physical, special, and so on
- Usually a single stat does not exceed 252, and the total does not exceed 510
custom_battle_stats
Purpose Custom battle stats for the Boss.
Example
"custom_battle_stats": {
"hp": {
"value": 5000,
"mode": "exact"
},
"speed": {
"value": 1000,
"mode": "minimum"
}
}
Notes
- Useful for making true boss-level stats
- You do not need to write all six stats
- Only write the stats you want to modify
Available stat keys
hpattackdefensespecial_attackspecial_defensespeed
value
Purpose The target stat value.
Example
"value": 5000
Notes
- Usually a positive integer
mode
Purpose Defines how the stat value is applied.
Example
"mode": "exact"
Available values
exactminimummaximum
Meaning
exact: use this value directlyminimum: at least this valuemaximum: at most this value
battle_mode
Purpose Defines the battle size mode.
Example
"battle_mode": "6v1"
or
"battle_mode": "six_vs_one"
Available values
1v1/one_vs_one2v1/two_vs_one3v1/three_vs_one4v1/four_vs_one5v1/five_vs_one6v1/six_vs_one
Notes
- Useful for multiplayer boss fights
- “X v 1” means up to X players can fight 1 Boss together
actions_per_turn
Purpose The number of actions the Boss can take per turn.
Example
"actions_per_turn": 6
Notes
- This means how many times the Boss can act in one turn
- This value cannot exceed the player limit defined by the current
battle_mode - In other words, if the battle mode is X v 1, then this value can be at most X
Limits by battle mode
1v1/one_vs_one→ max12v1/two_vs_one→ max23v1/three_vs_one→ max34v1/four_vs_one→ max45v1/five_vs_one→ max56v1/six_vs_one→ max6
Examples
- If
"battle_mode": "6v1", then"actions_per_turn"can be at most6 - If
"battle_mode": "3v1", then"actions_per_turn"can be at most3
Recommendation
- Increase it when designing multiplayer Bosses
- Do not set it far above the battle scale, or the fight will become very unbalanced
moves
Purpose The initial moveset of the Boss.
Example
"moves": ["scald", "icywind", "yawn", "protect"]
Recommendation Recommended.
Notes
- Designing around 4 moves is usually the most intuitive
nature
Purpose The Boss nature.
Example
"nature": "bold"
Recommendation Optional.
ability
Purpose The Boss ability.
Example
"ability": "torrent"
Recommendation Optional.
form
Purpose The Boss form.
Example
"form": ""
or
"form": "mega"
Recommendation Optional.
held_items
Purpose The list of held items for the Boss.
Example
"held_items": ["cobblemon:leftovers"]
Recommendation Optional.
phase_skills
Purpose Moveset changes based on HP phases.
Example
"phase_skills": [
{
"hp_percent": 90,
"moves": ["scald", "icywind", "yawn", "toxic"]
},
{
"hp_percent": 80,
"moves": ["waterpulse", "flashcannon", "rest", "protect"]
}
]
Notes
- Useful for multi-phase Boss fights
- The Boss switches to another moveset after reaching a certain HP threshold
7. Single phase skill description
hp_percent
Purpose The HP percentage that triggers the phase.
Example
"hp_percent": 90
Notes
- Usually written as a number from 1 to 100
- Means the phase is entered when HP is less than or equal to this percentage
moves
Purpose The moveset used in this phase.
Example
"moves": ["scald", "icywind", "yawn", "toxic"]
Notes
- Usually 1 to 4 moves
8. Full stat key list
The following keys appear repeatedly in effort_values, evs, ivs, and custom_battle_stats:
"hp"
"attack"
"defense"
"special_attack"
"special_defense"
"speed"
Their meanings are:
hp: HPattack: Attackdefense: Defensespecial_attack: Special Attackspecial_defense: Special Defensespeed: Speed
9. Most common beginner design ideas
Making the most basic Boss
At minimum, think about:
unique_idspecies_iddisplay_namerandom_configsmoves
Making a naturally spawning Boss
Also add:
spawn_rulespawn_locationsspawn_timesspawn_biomesspawn_weight
Making a Boss with drops
Also add:
reward_rulereward_items
Making a Boss with punishment on failure
Also add:
punish_rulepunish_items
Making a true raid-style Boss
Also add:
custom_battle_statsphase_skillsbattle_modeactions_per_turn
10. One-sentence summary
This Boss data pack configuration is essentially:
- Use
unique_idandspecies_idto define the Boss identity - Use
spawn_ruleto define how it appears - Use
reward_ruleandpunish_ruleto define win/loss outcomes - Use
random_configsto define its actual combat stats, moves, phases, and battle style
11. Configuration File Explanation
This part is divided into two categories:
- JSON configurations
- TOML configurations
11.1 JSON configuration files
config/cobblemonboss/level-mapping.json
This file is used to:
Map player level to Boss level.
For example:
- Player level 1 → Boss level 2
- Player level 50 → Boss level 65
- Player level 100 → Boss level 155
How to modify it
The left side is the player level, and the right side is the corresponding Boss level.
Example:
{
"1": 5,
"2": 5,
"3": 6,
"4": 6,
"5": 7
}
config/cobblemonboss/pokemon-max-level.json
This file is used to:
Modify Cobblemon's global maximum Pokémon level.
Default file:
{
"configName": "Pokemon Max Level",
"maxPokemonLevel": 900,
"description": "Set the maximum level limit for Pokemon"
}
Field descriptions
configName
Configuration name, only for description.
maxPokemonLevel
The global maximum Pokémon level.
description
Description text.
Common example
{
"configName": "Pokemon Max Level",
"maxPokemonLevel": 200,
"description": "Set the maximum level limit for Pokemon"
}
11.2 TOML configuration files
player-level-limit.toml
[playerLevelLimit]
enablePlayerLevelLimit = true
maxPlayerPokemonLevel = 100
Field descriptions
enablePlayerLevelLimit: whether to enable the player Pokémon level capmaxPlayerPokemonLevel: the maximum level player Pokémon are allowed to reach
pokemon-boss-battle-check.toml
[battle_check.basic]
enableBattleCheck = false
cancelBattle = true
[battle_check.pokemon]
enablePokemonCheck = true
bannedPokemonList = ["cobblemon:ditto"]
[battle_check.items]
enableItemCheck = true
bannedItemsList = ["cobblemon:master_ball"]
[battle_check.moves]
enableMoveCheck = true
bannedMovesList = ["endeavor"]
Field descriptions
enableBattleCheck: whether to enable pre-battle checks for Boss battlescancelBattle: whether to cancel the battle directly if banned content is detectedenablePokemonCheck: whether to check banned PokémonbannedPokemonList: list of banned PokémonenableItemCheck: whether to check banned itemsbannedItemsList: list of banned itemsenableMoveCheck: whether to check banned movesbannedMovesList: list of banned moves
pokemon-boss-capture.toml
["Boss Capture Settings"]
preventBossCapture = true
showCaptureMessage = true
Field descriptions
preventBossCapture: whether Boss Pokémon cannot be capturedshowCaptureMessage: whether to show a message when capture is prevented
pokemon-boss-immune.toml
[immune]
enableBossImmune = true
Field descriptions
enableBossImmune: whether to enable the Boss immunity system
pokemon-boss-level.toml
[level]
bossLevelMultiplier = 1.5
minBossLevel = 5
maxBossLevel = 200
includePCPokemon = true
scaleByMaxLevel = true
enableCustomLevelMapping = true
enableLevelRandom = true
randomMin = -10
randomMax = 10
Field descriptions
bossLevelMultiplier: Boss level multiplierminBossLevel: minimum Boss levelmaxBossLevel: maximum Boss levelincludePCPokemon: whether to include Pokémon stored in the PC when calculating levelscaleByMaxLevel: whether to scale Boss level based on the player's highest levelenableCustomLevelMapping: whether to enablelevel-mapping.jsonenableLevelRandom: whether to enable random Boss level variationrandomMin: minimum random variationrandomMax: maximum random variation
Common ideas
Use the mapping table only:
[level]
bossLevelMultiplier = 1.5
minBossLevel = 5
maxBossLevel = 200
includePCPokemon = true
scaleByMaxLevel = true
enableCustomLevelMapping = true
enableLevelRandom = false
randomMin = -10
randomMax = 10
Do not use the mapping table, only use the multiplier:
[level]
bossLevelMultiplier = 2.0
minBossLevel = 10
maxBossLevel = 200
includePCPokemon = true
scaleByMaxLevel = true
enableCustomLevelMapping = false
enableLevelRandom = true
randomMin = -5
randomMax = 5
pokemon-boss-penalty.toml
enablePenalty = true
["Penalty Chance Settings (Level Scaling)"]
minPenaltyChance = 0.1
maxPenaltyChance = 1.0
penaltyLevelScale = 100
Field descriptions
enablePenalty: master switch for Boss battle failure punishmentsminPenaltyChance: minimum punishment chancemaxPenaltyChance: maximum punishment chancepenaltyLevelScale: scaling factor for punishment chance based on level
pokemon-boss-reward.toml
["Boss Reward Settings"]
minDropRate = 0.1
maxDropRate = 1.0
levelScale = 100
Field descriptions
minDropRate: minimum drop ratemaxDropRate: maximum drop ratelevelScale: scaling factor for drop rate based on level
pokemon-boss-spawn.toml
["Boss Spawn Settings"]
enableBossSpawn = true
checkIntervalTicks = 12000
spawnChance = 0.1
enableSpawnTimeRandom = true
randomValueMin = 1000
randomValueMax = 3000
spawnFrequency = 1
Field descriptions
enableBossSpawn: whether to enable the natural Boss spawning systemcheckIntervalTicks: spawn check interval, in ticksspawnChance: spawn probability for each checkenableSpawnTimeRandom: whether to enable random variation for spawn timingrandomValueMin: minimum random variationrandomValueMax: maximum random variationspawnFrequency: additional random spawn attempts during one check cycle
How to understand spawnFrequency
0: only one fixed spawn check at the end of the cycle1: 1 extra random chance during the cycle, plus 1 check at the end2: 2 extra random chances during the cycle, plus 1 check at the end
12. Configuration suggestions for beginners
12.1 The simplest usable setup
pokemon-max-level.json
{
"configName": "Pokemon Max Level",
"maxPokemonLevel": 200,
"description": "Set the maximum level limit for Pokemon"
}
level-mapping.json
Use the default mapping first. Do not change it too early.
pokemon-boss-level.toml
[level]
bossLevelMultiplier = 1.5
minBossLevel = 5
maxBossLevel = 200
includePCPokemon = true
scaleByMaxLevel = true
enableCustomLevelMapping = true
enableLevelRandom = true
randomMin = -5
randomMax = 5
pokemon-boss-spawn.toml
["Boss Spawn Settings"]
enableBossSpawn = true
checkIntervalTicks = 12000
spawnChance = 0.1
enableSpawnTimeRandom = true
randomValueMin = 1000
randomValueMax = 3000
spawnFrequency = 1
pokemon-boss-reward.toml
["Boss Reward Settings"]
minDropRate = 0.1
maxDropRate = 1.0
levelScale = 100
pokemon-boss-penalty.toml
enablePenalty = true
["Penalty Chance Settings (Level Scaling)"]
minPenaltyChance = 0.1
maxPenaltyChance = 1.0
penaltyLevelScale = 100
12.2 If you want stricter Boss battles
It is recommended to enable:
[battle_check.basic]
enableBattleCheck = true
cancelBattle = true
Then add as needed:
- Ban certain Pokémon
- Ban certain items
- Ban certain moves
12.3 If you want Bosses to be absolutely uncapturable
Keep:
["Boss Capture Settings"]
preventBossCapture = true
showCaptureMessage = true
13. One-sentence summary of configs
These configuration files can be understood as:
pokemon-max-level.json: global Pokémon max levellevel-mapping.json: player level → Boss level mapping tablepokemon-boss-level.toml: Boss level calculation logicpokemon-boss-spawn.toml: Boss spawn rulespokemon-boss-reward.toml: Boss reward probabilitypokemon-boss-penalty.toml: Boss punishment probabilitypokemon-boss-battle-check.toml: Boss battle restriction checkspokemon-boss-capture.toml: Boss capture preventionpokemon-boss-immune.toml: Boss immunity switchplayer-level-limit.toml: player Pokémon level cap
14. Boss Command Usage
This section introduces 3 commands:
/checkpokemonboss/spawnpokemonboss/spawnpokemonbossat
14.1 /checkpokemonboss
Purpose
Checks which Bosses can possibly spawn at the player's current location, and shows the countdown until the next Boss refresh.
Permission
All players can use it.
Usage
/checkpokemonboss
Description
After running it, it will display:
- How many minutes remain until the next Boss refresh
- A list of Bosses that match the current location
- The display name of each Boss
- The spawn weight of each Boss
When to use it
- Players want to know what Bosses can spawn in their current location
- Players want to know how long until the next refresh
- Server owners want to test whether biome / time / spawn rules are working correctly
14.2 /spawnpokemonboss
Purpose
Directly spawns a specified Boss near the player.
Permission
Requires administrator permission.
Usage
Basic form:
/spawnpokemonboss <bossUniqueId>
With level specified:
/spawnpokemonboss <bossUniqueId> <level>
Parameter descriptions
<bossUniqueId>
The Boss unique ID, which is the value of:
"unique_id": "xxx"
For example:
blastoise_dripstone_caves_boss
<level>
The Boss level.
- If omitted, the default level is
1 - If provided, you can specify the level manually
- Valid range:
1 ~ 900
Examples
Spawn a Boss with the default level:
/spawnpokemonboss blastoise_dripstone_caves_boss
Spawn a level 80 Boss:
/spawnpokemonboss blastoise_dripstone_caves_boss 80
Spawn a level 150 Boss:
/spawnpokemonboss blastoise_dripstone_caves_boss 150
Notes
- This command can only summon by Boss unique ID
- You cannot use the species ID directly
- The command supports auto-completion and will suggest all loaded Boss unique IDs
14.3 /spawnpokemonbossat
Purpose
Manages fixed Boss spawn points.
You can use it to:
- Create a fixed spawn point
- Add Bosses to the spawn pool
- Remove Bosses from the spawn pool
- Modify Boss weights
- Delete a spawn point
- View spawn point information
- Manually trigger a spawn point
- Set or clear hologram text
Permission
Requires administrator permission.
14.3.1 Create a spawn point
Usage
Without custom text:
/spawnpokemonbossat create <id> <dimension> <x> <y> <z> <level> <respawnSeconds>
With custom text:
/spawnpokemonbossat create <id> <dimension> <x> <y> <z> <level> <respawnSeconds> <text>
Parameter descriptions
<id>
The spawn point ID. Each spawn point should have its own unique name.
<dimension>
The dimension, for example:
minecraft:overworldminecraft:the_netherminecraft:the_end
<x> <y> <z>
The coordinates of the spawn point.
<level>
The level of the Boss spawned at this point.
<respawnSeconds>
The respawn time after the Boss is defeated, in seconds.
<text>
Optional hologram text.
Examples
Create a spawn point in the Overworld:
/spawnpokemonbossat create boss_point_1 minecraft:overworld 100 64 100 80 600
Create a spawn point with custom text:
/spawnpokemonbossat create boss_point_2 minecraft:overworld 200 70 200 100 900 §cBlastoise Boss
14.3.2 Add a Boss to a spawn point
Usage
/spawnpokemonbossat addboss <id> <bossUniqueId> <weight>
Parameter descriptions
<id>: spawn point ID<bossUniqueId>: the Boss unique ID to add to the pool<weight>: weight, higher values usually mean a higher chance to be selected
Example
/spawnpokemonbossat addboss boss_point_1 blastoise_dripstone_caves_boss 10
14.3.3 Remove a Boss from a spawn point
Usage
/spawnpokemonbossat removeboss <id> <bossUniqueId>
Example
/spawnpokemonbossat removeboss boss_point_1 blastoise_dripstone_caves_boss
14.3.4 Change the weight of a Boss in a spawn point
Usage
/spawnpokemonbossat setweight <id> <bossUniqueId> <weight>
Example
/spawnpokemonbossat setweight boss_point_1 blastoise_dripstone_caves_boss 20
14.3.5 Remove a spawn point
Usage
/spawnpokemonbossat remove <id>
Example
/spawnpokemonbossat remove boss_point_1
Notes
After deletion, the following will also be handled:
- Spawn point data
- Hologram display
- The currently active fixed Boss
14.3.6 List all spawn points
Usage
/spawnpokemonbossat list
Purpose
Displays information about all current fixed spawn points, including:
- Spawn point ID
- Dimension
- Coordinates
- Boss level
- Respawn time
- Boss pool
- Current active Boss
14.3.7 View details of a single spawn point
Usage
/spawnpokemonbossat info <id>
Example
/spawnpokemonbossat info boss_point_1
Purpose
Displays complete information about a spawn point, including:
- Dimension
- Coordinates
- Boss level
- Respawn time
- Next respawn time
- Current active Boss
- Current hologram text
- Boss pool list
14.3.8 Manually trigger a spawn point
Usage
/spawnpokemonbossat trigger <id>
Example
/spawnpokemonbossat trigger boss_point_1
Purpose
Immediately makes this spawn point ready to spawn again, usually for testing.
14.3.9 Set spawn point hologram text
Usage
/spawnpokemonbossat settext <id> <text>
Example
/spawnpokemonbossat settext boss_point_1 §bDeep Sea Boss Spawn Point
Purpose
Changes the hologram text shown for this spawn point.
14.3.10 Clear spawn point hologram text
Usage
/spawnpokemonbossat cleartext <id>
Example
/spawnpokemonbossat cleartext boss_point_1
Purpose
Clears the custom hologram text and restores the default display.
15. Most commonly used command combinations
Directly test whether a Boss can be summoned:
/spawnpokemonboss blastoise_dripstone_caves_boss 100
Check which Bosses may spawn at the current location:
/checkpokemonboss
Create a fixed spawn point:
/spawnpokemonbossat create boss_point_1 minecraft:overworld 100 64 100 80 600
Add a Boss to this spawn point:
/spawnpokemonbossat addboss boss_point_1 blastoise_dripstone_caves_boss 10
View information about this spawn point:
/spawnpokemonbossat info boss_point_1
Manually trigger this spawn point:
/spawnpokemonbossat trigger boss_point_1
16. The simplest way for beginners to understand it
If you are just getting started:
To check what Bosses can spawn at your current location, use:
/checkpokemonboss
To directly summon a Boss for testing, use:
/spawnpokemonboss <bossUniqueId> <level>
To create a Boss that spawns at a fixed location, the main commands are:
/spawnpokemonbossat create ...
/spawnpokemonbossat addboss ...
/spawnpokemonbossat info ...
/spawnpokemonbossat trigger ...
17. Time logic reference for developers
If you want to match the exact spawn-time behavior in code, use the following logic:
public static PokemonBossDefinition.SpawnTime getCurrentSpawnTime(ServerLevel level) {
long dayTime = level.getDayTime() % 24000;
if (dayTime >= 0 && dayTime < 3000) {
return PokemonBossDefinition.SpawnTime.early_morning;
} else if (dayTime >= 3000 && dayTime < 6000) {
return PokemonBossDefinition.SpawnTime.morning;
} else if (dayTime >= 6000 && dayTime < 12000) {
return PokemonBossDefinition.SpawnTime.noon;
} else if (dayTime >= 12000 && dayTime < 15000) {
return PokemonBossDefinition.SpawnTime.afternoon;
} else if (dayTime >= 15000 && dayTime < 18000) {
return PokemonBossDefinition.SpawnTime.dusk;
} else if (dayTime >= 18000 && dayTime < 21000) {
return PokemonBossDefinition.SpawnTime.night;
} else {
return PokemonBossDefinition.SpawnTime.midnight;
}
}
This means your spawn_times documentation should always match these tick intervals:
early_morning:0 - 2999morning:3000 - 5999noon:6000 - 11999afternoon:12000 - 14999dusk:15000 - 17999night:18000 - 20999midnight:21000 - 23999
all_day is a special configuration value and should be treated as:
- no time restriction
- always allowed regardless of the current tick range



