Skip to content

Venture Examples

This guide provides complete, copy-paste ready venture configurations organized by complexity level.

A basic venture where one Pokémon trains and gains experience.

id: "forest_training"
name: "Forest Training"
description: [
"Send a Pokémon into the forest for basic training.",
"Your Pokémon will gain experience and improve its Speed."
]
icon: "minecraft:oak_sapling"
duration: 60000 # 1 minute
cooldown: 120 # 2 minutes
required_pokemon_amount: 1
visibility_requirements: ["1.0"]
click_requirements: ["1.0"]
pokemon_requirements: [
"""
q.pokemon.level >= 10.0 ? 1.0 : {
q.append_fail_message('Pokemon must be at least level 10!');
return 0.0;
};
"""
]
requirements: [
"q.add_requirement('Pokemon must be level 10 or higher');",
"1.0;"
]
reward_builder: [
"q.add_reward_line('150 XP');",
"q.add_reward_line('5 Speed EVs');"
]
rewards: [
{
type: script
reward_string: "XP and EVs"
scripts: [
"""
q.pokemon(0).add_xp(150);
q.pokemon(0).set_ev('spe', math.min(252, q.pokemon(0).evs.spe + 5.0));
"""
]
}
]

A venture requiring multiple Pokémon of specific types with type-based rewards.

id: "elemental_training"
name: "Elemental Training Grounds"
description: [
"Send a team to train in diverse environments.",
"Fire, Water, and Grass types will benefit most."
]
icon: "cobblemon:fire_stone"
duration: 180000 # 3 minutes
cooldown: 600
required_pokemon_amount: 3
allow_less_than_required: false
visibility_requirements: ["1.0"]
click_requirements: [
"""
t.has_fire = q.player.pc.find_by_properties('type=fire') >= 1.0;
t.has_water = q.player.pc.find_by_properties('type=water') >= 1.0;
t.has_grass = q.player.pc.find_by_properties('type=grass') >= 1.0;
t.has_fire && t.has_water && t.has_grass ? 1.0 : {
q.player.tell('<red>You need at least 1 Fire, Water, and Grass type in your PC!');
return 0.0;
};
"""
]
pokemon_requirements: [
"""
// Must be a valid type
t.valid = q.pokemon.is_type('fire') ||
q.pokemon.is_type('water') ||
q.pokemon.is_type('grass');
t.valid == 0.0 ? {
q.append_fail_message('Must be Fire, Water, or Grass type!');
return 0.0;
};
// Level requirement
q.pokemon.level < 20.0 ? {
q.append_fail_message(q.pokemon.species.name + ' must be level 20+!');
return 0.0;
};
// Ensure balanced team
t.fire_count = 0.0;
t.water_count = 0.0;
t.grass_count = 0.0;
for_each(t.p, q.selected_pokemon, {
t.fire_count = t.p.is_type('fire') ? t.fire_count + 1.0 : t.fire_count;
t.water_count = t.p.is_type('water') ? t.water_count + 1.0 : t.water_count;
t.grass_count = t.p.is_type('grass') ? t.grass_count + 1.0 : t.grass_count;
});
t.fire_count > 0.0 && t.water_count > 0.0 && t.grass_count > 0.0 ? 1.0 : {
q.append_fail_message('Team must include Fire, Water, AND Grass types!');
return 0.0;
};
"""
]
requirements: [
"q.add_requirement('All Pokemon must be level 20+');",
"q.add_requirement('Must have Fire, Water, and Grass types');",
"q.add_requirement('Requires exactly 3 Pokemon');",
"1.0;"
]
tick_script: [
"""
q.ticks_elapsed == 100.0 ? {
q.player.tell('<gray>Your Pokemon begin their elemental training...');
};
q.ticks_elapsed == 1800.0 ? {
q.player.tell('<gray>The training is intensifying!');
};
"""
]
reward_builder: [
"q.add_reward_line('200 XP per Pokemon');",
"q.add_reward_line('10 Special Attack EVs per Pokemon');",
"q.add_reward_line('Type-specific held items');"
]
rewards: [
{
type: script
reward_string: "XP, EVs, and items"
scripts: [
"""
for_each(t.pkmn, q.pokemon, {
// Add XP
t.pkmn.add_xp(200);
// Add Special Attack EVs
t.current_spa = t.pkmn.evs.spa;
t.pkmn.set_ev('spa', math.min(252, t.current_spa + 10.0));
// Give type-specific items
t.pkmn.is_type('fire') ? {
q.run_command('give ' + q.player.name + ' cobblemon:charcoal 1');
};
t.pkmn.is_type('water') ? {
q.run_command('give ' + q.player.name + ' cobblemon:mystic_water 1');
};
t.pkmn.is_type('grass') ? {
q.run_command('give ' + q.player.name + ' cobblemon:miracle_seed 1');
};
});
q.player.tell('<gold>Your team completed elemental training!');
"""
]
}
]

Advanced: Treasure Hunt with Dynamic Rewards

Section titled “Advanced: Treasure Hunt with Dynamic Rewards”

A venture with random treasure discoveries tracked via venture variables.

id: "treasure_expedition"
name: "Mysterious Treasure Hunt"
description: [
"Send a team of 6 Pokemon to explore ancient ruins.",
"They might discover rare treasures during the expedition!",
"Larger teams have better chances of finding treasure."
]
icon: "minecraft:chest"
duration: 240000 # 4 minutes
cooldown: 900
required_pokemon_amount: 6
allow_less_than_required: true
visibility_requirements: [
"q.player.pc.count >= 6.0 ? 1.0 : 0.0;"
]
click_requirements: ["1.0"]
pokemon_requirements: [
"""
q.pokemon.level < 30.0 ? {
q.append_fail_message(q.pokemon.species.name + ' must be level 30+!');
return 0.0;
};
1.0;
"""
]
requirements: [
"q.add_requirement('All Pokemon must be level 30+');",
"q.add_requirement('1-6 Pokemon can participate');",
"q.add_requirement('More Pokemon = better treasure chance');",
"1.0;"
]
tick_script: [
"""
// Initialize variables
v.treasures_found == 0.0 ? {
v.treasures_found = 0.0;
v.last_check = 0.0;
};
// Check every 10 seconds (200 ticks)
t.current_time = q.ticks_elapsed;
t.time_since_check = t.current_time - v.last_check;
t.time_since_check >= 200.0 ? {
v.last_check = t.current_time;
// Calculate treasure chance based on team size
t.team_size = q.pokemon.size;
t.base_chance = 5.0; // 5% base
t.bonus_per_pokemon = 3.0; // +3% per Pokemon
t.total_chance = t.base_chance + (t.team_size * t.bonus_per_pokemon);
// Roll for treasure
t.roll = math.random_integer(1, 100);
t.roll <= t.total_chance ? {
v.treasures_found = v.treasures_found + 1.0;
// Randomly select treasure type
t.treasure_roll = math.random_integer(1, 5);
t.treasures = q.array(
'minecraft:diamond', 'Diamond',
'minecraft:emerald', 'Emerald',
'minecraft:gold_ingot', 'Gold Ingot',
'cobblemon:rare_candy', 'Rare Candy',
'cobblemon:nugget', 'Nugget'
);
t.index = (t.treasure_roll - 1.0) * 2.0;
t.item_id = t.treasures[t.index];
t.item_name = t.treasures[t.index + 1.0];
// Store for reward
t.var_name = 'treasure_' + v.treasures_found;
v.set(t.var_name, t.item_id);
q.player.tell('<gold>Your Pokemon found a ' + t.item_name + '!');
};
};
// Progress messages
q.ticks_elapsed == 100.0 ? {
q.player.tell('<gray>Your Pokemon begin exploring the ruins...');
};
q.ticks_elapsed == 2400.0 ? {
q.player.tell('<gray>They dig deeper into the ancient chambers!');
};
q.ticks_elapsed == 4600.0 ? {
q.player.tell('<gray>They head back with their findings!');
};
"""
]
reward_builder: [
"""
t.team_size = q.pokemon.size;
t.base_xp = 300.0;
t.xp_total = t.base_xp * t.team_size;
q.add_reward_line(t.xp_total + ' XP (split among team)');
q.add_reward_line('Random treasures based on discoveries');
q.add_reward_line('+5 Speed EVs per Pokemon');
"""
]
rewards: [
{
type: script
reward_string: "XP, treasures, and EVs"
scripts: [
"""
// Distribute XP evenly
t.team_size = q.pokemon.size;
t.xp_per_mon = math.floor(300.0 * t.team_size / t.team_size);
for_each(t.pkmn, q.pokemon, {
t.pkmn.add_xp(t.xp_per_mon);
// Add Speed EVs
t.current_spe = t.pkmn.evs.spe;
t.pkmn.set_ev('spe', math.min(252, t.current_spe + 5.0));
});
// Give treasures
t.treasures_found = v.treasures_found;
t.treasures_found > 0.0 ? {
t.counter = 1.0;
// Loop through treasures (MoLang doesn't have traditional for loops)
t.counter <= t.treasures_found ? {
t.var_name = 'treasure_' + t.counter;
t.item = v.get(t.var_name);
q.run_command('give ' + q.player.name + ' ' + t.item + ' 1');
t.counter = t.counter + 1.0;
t.counter <= t.treasures_found ? {
t.var_name = 'treasure_' + t.counter;
t.item = v.get(t.var_name);
q.run_command('give ' + q.player.name + ' ' + t.item + ' 1');
t.counter = t.counter + 1.0;
t.counter <= t.treasures_found ? {
t.var_name = 'treasure_' + t.counter;
t.item = v.get(t.var_name);
q.run_command('give ' + q.player.name + ' ' + t.item + ' 1');
t.counter = t.counter + 1.0;
};
};
};
q.player.tell('<gold>Your Pokemon brought back ' + t.treasures_found + ' treasure(s)!');
} : {
q.player.tell('<gray>Your Pokemon didn\\'t find any treasures this time.');
q.run_command('give ' + q.player.name + ' minecraft:iron_ingot 3');
};
"""
]
}
]

A complex venture that improves Pokemon IVs based on team composition.

id: "iv_breeding_program"
name: "Advanced IV Breeding Program"
description: [
"Send Pokemon with good IVs to improve the entire team.",
"Pokemon with higher IVs contribute more to the program.",
"All participants gain IV improvements!"
]
icon: "cobblemon:destiny_knot"
duration: 300000 # 5 minutes
cooldown: 1800
required_pokemon_amount: 6
allow_less_than_required: false
visibility_requirements: ["1.0"]
click_requirements: ["1.0"]
pokemon_requirements: [
"""
q.pokemon.level < 50.0 ? {
q.append_fail_message(q.pokemon.species.name + ' must be level 50+!');
return 0.0;
};
// Calculate total IVs
t.total_ivs = q.pokemon.ivs.hp + q.pokemon.ivs.atk + q.pokemon.ivs.def +
q.pokemon.ivs.spa + q.pokemon.ivs.spd + q.pokemon.ivs.spe;
t.total_ivs < 90.0 ? {
q.append_fail_message(q.pokemon.species.name + ' IVs too low (need 90+ total)');
return 0.0;
};
1.0;
"""
]
requirements: [
"q.add_requirement('All Pokemon must be level 50+');",
"q.add_requirement('Each Pokemon must have 90+ total IVs');",
"q.add_requirement('Higher team IVs = better improvements');",
"q.add_requirement('Requires exactly 6 Pokemon');",
"1.0;"
]
tick_script: [
"""
v.iv_total == 0.0 ? {
// Calculate team IV average on start
v.iv_total = 0.0;
for_each(t.p, q.pokemon, {
v.iv_total = v.iv_total + t.p.ivs.hp + t.p.ivs.atk + t.p.ivs.def +
t.p.ivs.spa + t.p.ivs.spd + t.p.ivs.spe;
});
v.iv_average = v.iv_total / 6.0;
q.player.tell('<aqua>Team IV Average: ' + math.floor(v.iv_average));
};
q.ticks_elapsed == 3000.0 ? {
q.player.tell('<gray>The breeding program is analyzing genetics...');
};
"""
]
reward_builder: [
"""
q.add_reward_line('IV improvements based on team quality');
q.add_reward_line('500 XP per Pokemon');
q.add_reward_line('Chance for Destiny Knot (high IV teams)');
"""
]
rewards: [
{
type: script
reward_string: "IV improvements and XP"
scripts: [
"""
// Calculate IV improvement amount based on team average
t.iv_avg = v.iv_average;
// Determine IV boost (2-5 based on team quality)
t.iv_boost = 2.0;
t.iv_avg >= 120.0 ? t.iv_boost = 3.0;
t.iv_avg >= 150.0 ? t.iv_boost = 4.0;
t.iv_avg >= 170.0 ? t.iv_boost = 5.0;
// Apply improvements to each Pokemon
for_each(t.pkmn, q.pokemon, {
// Add XP
t.pkmn.add_xp(500);
// Randomly select stats to improve
t.stats = q.array('hp', 'atk', 'def', 'spa', 'spd', 'spe');
t.improvements_left = t.iv_boost;
// Improve random stats (unroll loop for MoLang)
t.improvements_left > 0.0 ? {
t.stat_index = math.random_integer(0, 5);
t.stat = t.stats[t.stat_index];
t.pkmn.add_iv(t.stat, 1);
t.improvements_left = t.improvements_left - 1.0;
t.improvements_left > 0.0 ? {
t.stat_index = math.random_integer(0, 5);
t.stat = t.stats[t.stat_index];
t.pkmn.add_iv(t.stat, 1);
t.improvements_left = t.improvements_left - 1.0;
t.improvements_left > 0.0 ? {
t.stat_index = math.random_integer(0, 5);
t.stat = t.stats[t.stat_index];
t.pkmn.add_iv(t.stat, 1);
t.improvements_left = t.improvements_left - 1.0;
t.improvements_left > 0.0 ? {
t.stat_index = math.random_integer(0, 5);
t.stat = t.stats[t.stat_index];
t.pkmn.add_iv(t.stat, 1);
t.improvements_left = t.improvements_left - 1.0;
t.improvements_left > 0.0 ? {
t.stat_index = math.random_integer(0, 5);
t.stat = t.stats[t.stat_index];
t.pkmn.add_iv(t.stat, 1);
};
};
};
};
};
q.player.tell('<aqua>' + t.pkmn.species.name + ' gained ' + t.iv_boost + ' random IV points!');
});
// Bonus Destiny Knot for exceptional teams
t.iv_avg >= 170.0 ? {
t.roll = math.random_integer(1, 100);
t.roll <= 25.0 ? {
q.run_command('give ' + q.player.name + ' cobblemon:destiny_knot 1');
q.player.tell('<rainbow>Exceptional breeding! Received Destiny Knot!');
};
};
"""
]
}
]
  • Use modulo checks in tick_script: (q.ticks_elapsed % 200) == 0.0
  • Cache calculated values in temporary variables
  • Avoid complex calculations every tick
  • Provide clear failure messages in requirements
  • Send progress messages during long ventures
  • Give meaningful rewards scaled to duration and difficulty
  • Start with simple ventures and add complexity
  • Test with different team compositions
  • Verify reward scaling makes sense
  • Consider venture duration vs cooldown ratio
  • Scale rewards with difficulty and time investment
  • Make requirements clear and achievable