Compatibility
Minecraft: Java Edition
Platforms
Supported environments
Links
Details
This mod helps datapack creators configure Cobblemon spawns when players break blocks. This works with any block type including crops, flowers, grass, ores, and more. The system supports blocks with age/stage properties but also works with blocks that don't have these properties.
Creating Spawn Configurations
File Location
Place your JSON configuration files in:
data/<your_namespace>/growamon/<filename>.json
For example:
data/mypack/growamon/wheat_oddish.jsondata/mypack/growamon/sunflower_sunflora.jsondata/mypack/growamon/stone_geodude.json
JSON Format
{
"block": "minecraft:wheat",
"cobblemon": "cobblemon:arbok",
"odds": 0.05,
"required_age": 7,
"min_level": 5,
"max_level": 10,
"shiny_odds": 0.01,
"aspects": {
"snake_pattern": "speed"
},
"ivs": {
"hp": 31,
"attack": [25, 31],
"defense": 31,
"special_attack": [20, 31],
"special_defense": 31,
"speed": [28, 31]
},
"cancel_drops": false
}
Parameters
-
block (required): The block ID that triggers the spawn
- Format:
namespace:block_id - Examples:
minecraft:wheat,minecraft:sunflower,minecraft:stone,somemod:magical_crop - Works with any block type (crops, flowers, ores, grass, etc.)
- Format:
-
cobblemon (required): The Cobblemon species to spawn
- Format:
cobblemon:species_name - Examples:
cobblemon:oddish,cobblemon:bulbasaur,cobblemon:chikorita
- Format:
-
odds (required): The chance of spawning (0.0 to 1.0)
0.05= 5% chance0.1= 10% chance1.0= 100% chance (always spawns)
-
required_age (optional): The specific growth stage required
- If omitted, any growth stage will trigger the spawn (or blocks without age properties will always trigger)
- Most vanilla crops have ages 0-7, with 7 being fully grown
- Beetroots use 0-3, with 3 being fully grown
- The system automatically detects properties named "age", "stage", or any integer property
- For blocks without age/stage properties (stone, grass, etc.), this parameter is ignored
-
min_level (optional): The minimum level for the spawned Cobblemon (default: 5)
- Must be at least 1
- Example:
5for level 5
-
max_level (optional): The maximum level for the spawned Cobblemon (default: 5)
- Must be greater than or equal to min_level
- Example:
10for up to level 10 - The actual level will be randomly chosen between min and max (inclusive)
-
shiny_odds (optional): The chance of the spawned Cobblemon being shiny (0.0 to 1.0, default: 0.0)
0.01= 1% chance to be shiny0.1= 10% chance to be shiny1.0= 100% chance (always shiny)
-
aspects (optional): Aspects to apply to the spawned Cobblemon
- Format options:
- Array of strings:
["shiny", "galarian"]for simple aspects - Array with objects:
["shiny", {"pattern": "kanto"}]for mixed simple and multi-choice aspects - Object:
{"pattern": "kanto", "shiny": true}for multi-choice aspects with boolean flags
- Array of strings:
- Multi-choice aspects (aspects with options) use the format
{"aspect_name": "option_value"}- Example:
{"pattern": "kanto"}becomespattern=kanto - Example:
{"bloom": "leaf"}becomesbloom=leaf(for custom modded aspects)
- Example:
- Boolean aspects in object format:
{"shiny": true}adds the aspect,{"shiny": false}omits it - Aspects modify the appearance or properties of Cobblemon and can trigger form changes
- When an aspect corresponds to a form (e.g., "galarian", "alola", "hisuian"), the Pokemon will be created with that form and all its associated stats/types/moves
- See Cobblemon documentation for available aspects and their options
- Format options:
-
ivs (optional): Individual Values for the spawned Cobblemon's stats (0-31 for each stat)
- Format: Object with stat names as keys
- Available stats:
hp,attack,defense,special_attack,special_defense,speed - Values are clamped between 0 and 31
- If omitted, IVs are randomly generated (default behavior)
- Fixed value format:
"hp": 31- Always spawns with exactly 31 HP IV - Range format:
"hp": [20, 31]- Spawns with random HP IV between 20-31 (inclusive) - Example:
{"hp": 31, "attack": [25, 31], "speed": 31}for perfect HP and Speed, but variable Attack
-
cancel_drops (optional): Prevent the block from dropping its normal loot when a Cobblemon spawns (default: false)
- Set to
trueto cancel all block drops when the Cobblemon spawns - The block will still be destroyed, but no items will drop
- Automatically detects and cancels drops for connected blocks (e.g., both halves of a sunflower)
- Works by checking adjacent positions (above, below) for matching block types
- Useful for preventing players from getting both the Cobblemon and the drop
- When
false, players get both the Cobblemon spawn and normal block drops
- Set to
Examples
Basic: Wheat spawns Oddish (5% chance, fully grown only)
{
"block": "minecraft:wheat",
"cobblemon": "cobblemon:oddish",
"odds": 0.05,
"required_age": 7
}
With level range: Carrots spawn Buneary (10% chance, levels 5-15)
{
"block": "minecraft:carrots",
"cobblemon": "cobblemon:buneary",
"odds": 0.1,
"required_age": 7,
"min_level": 5,
"max_level": 15
}
With shiny odds: Potatoes spawn shiny Bellsprout occasionally
{
"block": "minecraft:potatoes",
"cobblemon": "cobblemon:bellsprout",
"odds": 0.05,
"required_age": 7,
"shiny_odds": 0.1
}
With aspects (string array): Beetroots spawn Galarian Zigzagoon
{
"block": "minecraft:beetroots",
"cobblemon": "cobblemon:zigzagoon",
"odds": 0.05,
"required_age": 3,
"aspects": ["galarian"]
}
With multi-choice aspects (object format): Custom Pokemon with pattern
{
"block": "minecraft:pumpkin",
"cobblemon": "cobblemon:pumpkaboo",
"odds": 0.1,
"aspects": {"pumpkin_size": "super"}
}
With mixed aspects: Shiny Pokemon with custom bloom aspect
{
"block": "minecraft:oxeye_daisy",
"cobblemon": "cobblemon:redpickmin",
"odds": 0.05,
"required_age": 7,
"aspects": ["shiny", {"bloom": "leaf"}]
}
With perfect IVs: Sunflower spawns perfect IV Sunflora
{
"block": "minecraft:sunflower",
"cobblemon": "cobblemon:oddish",
"odds": 0.01,
"required_age": 7,
"ivs": {
"hp": 31,
"attack": 31,
"defense": 31,
"special_attack": 31,
"special_defense": 31,
"speed": 31
}
}
With IV ranges: Carrots spawn high IV Buneary
{
"block": "minecraft:carrots",
"cobblemon": "cobblemon:buneary",
"odds": 0.05,
"required_age": 7,
"ivs": {
"hp": [25, 31],
"attack": [20, 31],
"speed": [25, 31]
}
}
With cancelled drops: Potatoes (Cobblemon instead of drops)
{
"block": "minecraft:potatoes",
"cobblemon": "cobblemon:oddish",
"odds": 0.08,
"required_age": 7,
"cancel_drops": true
}
Multi-block structures: Sunflowers (auto-detects 2-tall blocks)
{
"block": "minecraft:sunflower",
"cobblemon": "cobblemon:sunflora",
"odds": 0.15,
"cancel_drops": true
}
Note: Breaking either half will trigger spawn checks based on the bottom half. Both halves are removed when cancel_drops: true.
Non-crop example: Stone spawns Geodude
{
"block": "minecraft:stone",
"cobblemon": "cobblemon:geodude",
"odds": 0.02,
"min_level": 10,
"max_level": 20
}
Tall grass spawns bug-type Pokemon
{
"block": "minecraft:tall_grass",
"cobblemon": "cobblemon:caterpie",
"odds": 0.08,
"min_level": 3,
"max_level": 8
}
Note: Breaking either half processes the spawn check. The system automatically uses the bottom half's properties.
How It Works
- When a player breaks a block, Grow-A-Mon checks all loaded configurations
- For 2-tall blocks (sunflowers, tall grass, doors, etc.):
- The system automatically detects when a block is part of a 2-tall structure
- It identifies the bottom half as the "main" block for processing
- Breaking either half will trigger spawn checks based on the bottom half's properties
- Both halves are properly tracked to prevent duplicate spawns and handle drop cancellation
- If the block matches a configuration:
- Checks if the block's age/stage matches (if
required_ageis specified) - Rolls the dice based on the
oddsvalue - If successful, spawns the specified Cobblemon at the block's location
- If
cancel_dropsis true, prevents both halves from dropping loot (for 2-tall blocks)
- Checks if the block's age/stage matches (if
- The spawned Cobblemon will appear at the bottom block position with the configured level, shiny status, IVs, and aspects
Compatibility
I haven't been able to do thorough testing so these are what SHOULD be compatible...
- ✅ Works with any block type (crops, flowers, grass, ores, stone, etc.)
- ✅ Works with vanilla blocks and modded blocks
- ✅ Automatically detects growth stage properties (age, stage, etc.)
- ✅ Fully automatic 2-tall block detection and processing (sunflowers, tall grass, etc.)
- ✅ Breaking either half of 2-tall blocks properly triggers spawns based on bottom half
- ✅ Proper drop cancellation for both halves of multi-block structures
- ✅ Multiple datapacks can add their own configurations
- ✅ Configurations reload with
/reloadcommand - ⚠️ Blocks with horizontal extensions (blockstates) don't work properly - see Known Issues below
If any of these aren't as described please inform me of any issues in my Discord
Known Issues
Blocks with Horizontal Extensions/Blockstates
Blocks that physically extend horizontally across multiple block positions (such as beds with head/foot sections) do not work properly with the spawn system. The current implementation only handles vertical multi-block structures (2-tall blocks), not horizontal ones.
Affected block types include:
- Beds (head and foot sections extend horizontally)
- Any other blocks that occupy multiple horizontal block positions
Note: Single-block structures like fences, walls, and glass panes work fine - they only occupy one block position (their connecting appearance is just visual). Doors also work since they extend vertically (top/bottom), not horizontally.
Workaround: Use blocks that don't extend horizontally across multiple block positions if you need reliable spawn triggers.
Tips
- Use lower odds (0.01-0.1) for rare Cobblemon to keep them special
- Match thematic Cobblemon to blocks (grass types for wheat, rock types for stone, etc.)
- Consider using different odds for different growth stages on age-based blocks
- Use level ranges to add variety (e.g.,
min_level: 5, max_level: 15) - Keep shiny odds low (0.001-0.01) to maintain their rarity
- Combine high shiny odds with low spawn odds for "jackpot" encounters
- Use aspects sparingly for special encounters
- For multi-choice aspects (pattern, form, bloom, etc.), use object format:
{"pattern": "kanto"}- this automatically adds the=separator - You can mix aspect formats:
["shiny", {"pattern": "kanto"}]works perfectly - Use perfect IVs (31) for ultra-rare encounters or legendary Pokemon
- Use IV ranges like
[25, 31]to guarantee high IVs without being perfect (adds variety) - Mix fixed and range IVs for interesting combinations (e.g., perfect speed but variable attack)
- Set
cancel_drops: trueif you want the Cobblemon to replace the block drops entirely cancel_drops: truewill prevent drops from both halves of 2-tall blocks when a Cobblemon spawns- Leave
cancel_drops: false(default) if you want players to get both Cobblemon and block items - You don't need to specify all IVs - only set the ones you want to be fixed (others will be random)
- For 2-tall blocks: breaking either half works correctly - the system processes based on the bottom half automatically
- Test your configurations in creative mode first
- Use
/reloadto reload configurations without restarting
Troubleshooting
If spawns aren't working:
- Check the server log for errors when loading configurations
- Verify your JSON syntax is correct (use a JSON validator)
- Ensure the block ID is correct (use F3+H in-game to see IDs)
- Confirm the Cobblemon species exists (use
/pokespawn <species>to test) - Remember that odds are percentage-based - 0.05 = only 5% chance!
⚠️I cannot gaurantee the performance of this, it may be pretty laggy⚠️








