Combees are now capable of gathering nectar from flowers and delivering it to either Saccharine leaves or beehives (beehive interactions are restricted to wild Combees).
Added /runmolang <molang> [<npc>|<player>|<pokemon>] that executes a Molang expression with the provided options as environment variables, as well as the entity (as q.entity) that executed the command.
Added /changejointscale to change the scale of a joint in a model. Unbelievably funny to play around with but exists for testing purposes.
Added /npcdelete UUID parameter support and made it usable from console.
Added /spectatebattle <player> to spectate battles without having to manually walk up to the target.
Added /cobblemonconfig reload to reload the main.json configuration. Note: Some settings require a server restart to take effect; use this command cautiously.
Added /boxcount to change the number of PC boxes a player has.
Updated some item tags to better integrate behaviours between Cobblemon, vanilla Minecraft, and other mods:
Removed Cooked Meat, Raw Meat, Protein Ingredients, and Zinc Ingredient. The first two are now using c namespace tags and the latter have better integrated use of tags within their recipes which removes need for custom tags.
Added our seeds tag into #c:seeds, which is now made use of for the Miracle Seed recipe.
Updated the #cobblemon:berries tag to use subtags located in data/cobblemon/tags/item/berries, such as #cobblemon:berries/hp_recovery, for sorting purposes.
Moved the tag #cobblemon:mutated_berries to #cobblemon:berries/mutation_result
Added herbs and snowballs to the consumable in PvE and Wild battle tags.
Tweaked the Natural Materials vanilla file to fit with the changes to tags.
Changed the recipes for Level, Lure, and Moon Balls to be cleaner.
Renamed pokemonId and type to species, and evolved to has_evolved, in relevant Advancement triggers.
Added a separate species argument to the pick_starter, pasture_use and resurrect_pokemon Advancement triggers.
Made despawning behaviour configurable via the config.
Tweaked Berry flavor data to balance cooking pot mechanics. It's not using canon values any more!? That's it, I'm going back to [redacted]!
Made apricorn sprouts and saccharine saplings able to be placed into flower pots so you can make your cottage cuter.
Added all Potted Apricorn Sprouts, Potted Saccharine Saplings, and Potted Pep-Up Flowers to the #minecraft:flower_pots block tag.
Corrected the healing values of the remedies and energy root, and reintroduced the friendship lowering mechanics for those as well as the Revival Herb and Heal Powder.
Improved grammatical consistency in battles by making side effects use position-specific formats for language keys.
Reworked some compost chances.
Removed Braised Vivichoke. Gone. Reduced to atoms.
Vivichokes now always drop one seed when harvested. Converting a fully grown Vivichoke to seeds via crafting now only results in 1 seed to compensate.
Updated interaction interface to include 4 more option spaces because we're going to keep adding more interactions.
Updated light levels for an active PC, Pasture, Healing Machine, and Data Monitor.
Healing Machine recipe rebalanced to not require a Ghast Tear after extensive lobbying from the Nether Gastly union. The Revive has been replaced with a Max Revive.
Refactored dynamic lights compat to be more future proof. The dynamic light support is only tested with LambDynamicLights, on NeoForged use that mod in combination with Sinytra Connector.
Renamed Masterful Dedication advancement to This will affect the Whiscash Population.
Changed icon for the following advancements: New Angles for Angling, Researcher Recruit, Doing my Part, Reapriforestation.
Disabled advancement Mother Nature's Bounty from appearing in chat when obtained, now only appears as a toast and in the advancements menu.
Fixed Whiscash Nero and Wooper Heart being fishable with all rods.
Fixed the "enabled" property in spawn files not actually being respected. Where do they even find these devs?
Fixed Terralith's shrubland not counting as plains for spawning purposes the way it was intended to.
Developer
A finished battle now has winners and losers set inside of PokemonBattle instead of them always being empty.
Dialogues are correctly removed from memory when they are stopped.
Dialogues with variably-set initial pages now properly start timeout tracking.
Deprecated EVs#add(Stat, Int) in favour of EVs#add(Stat, Int, EvSource). You most likely want to use SidemodEvSource but please check other implementations or make your own.
Removed the NbtItemPredicate class, all the mod usages now use the vanilla item predicate solution. This causes breaking changes on Fossil, HeldItemRequirement and ItemInteractionEvolution.
Renamed Cobblemon's creative tabs to start with "Cobblemon: " to distinguish Cobblemon's tabs from tabs for other mods.
Various items now have a rarity value.
Removed all VaryingModelRepository subclasses and collapsed them into the parent class.
Refactored the following events to .Pre and .Post for consistency:
Updated NPCEntity beam positioning to properly account for the baseScale property.
Updated NPCEntity pokeball throw positioning to properly account for the baseScale property.
Fixed [Pokemon].copyFrom error causing forms, IVs, and EVs to not be applied properly when using [Pokemon].loadFromJSON or [Pokemon].loadFromNBT.
Added new item class, WearableItem. Instances of this class should have a corresponding 3D model. These models render when the items display context is HEAD.
Removed Npc interface from NPCEntity. The interface is unused and in vanilla is only implemented by VillagerEntity as a means to disable villagers with the spawn-npcs server property.
Added new Observable#subscribe methods that take Java Consumers to make usage in Java a little cleaner.
Annotated a bunch of Kotlin methods and fields for cleaner Java names.
baseScale in NPCs has been removed from classes and presets, and in the entity it is replaced with hitboxScale and renderScale.
Added EntityCallbacks to NPCEntity and PokemonEntity. You can trigger custom callback types by using [Entity].callbacks.process(...)
Added RenamePCBoxEvent.Pre and RenamePCBoxEvent.Post events to prevent players from renaming a box or changing their input.
Added ChangePCBoxWallpaperEvent.Pre and ChangePCBoxWallpaperEvent.Post to prevent players from changing wallpapers or changing their selection.
Added WallpaperCollectionEvent which gets called when clients connect to a server, allowing the server to handle which of the client-found wallpapers it's allowed to move (collected wallpapers can be removed for example to make it "vanish" client-side).
Added WallpaperUnlockedEvent.
Renamed SetPCBoxPokemonPacket and the respective handler to SetPCBoxPacket.
Spawning Influences now have the context of what the other buckets are when adjusting bucket weights. This will break existing influences that do bucket weight adjustment.
Renamed heaps of things in the spawning system to make more sense.
SpawningContext is now SpawnablePosition
WorldSlice is SpawningZone
SpawningProspector is now SpawningZoneGenerator
Majorly refactored the hierarchy of Spawner
The base Spawner interface provides more functions to allow single-point and area spawning given appropriate inputs.
TickingSpawner is removed in favour of outside code handling ticking logic.
AreaSpawner is removed.
BasicSpawner is the first implementation of Spawner which can be used for any purpose.
PlayerSpawners are now mixin'd into ServerPlayer and ticked from ServerPlayer#tick.
A hierarchy diagram can be found at ./docs/spawner-hierarchy.png in the mod repository.
The SpawnerManager class has been removed as its functionality is all now handled elsewhere.
Renamed things in Spawn Rules to go with the other renames:
Added an optional parameter for run_molang to schedule the function.
Added datapack-defined starter categories via data/<namespace>/starters/*.json, with built-in fallback and useConfigStarters merge option.
The format of the remedies.json file has changed to allow for individual friendshipDrop amounts per remedy.
Added prepare_{effect} and damage_{effect} action effect hooks in battles for more battle particle effects.
Fixed q.entity.find_nearby_block causing crashes when attempting to use a block tag.
Spawn Filters can now access v.spawn.class to get the identifier of an NPC class for when trying to influence NPC spawns.
Callbacks now have q. for any context properties in addition to the c. properties, making it a bit more convenient when calling other scripts from Callbacks.
Added entity (as q.entity) that executed the command to the /executemolangscript command.
Molang triggered battles may now set the battle format, whether to clone the player's party, set level, or heal prior.
Fixed clientActions inside Dialogue pages being executed twice.
Fixed background field and added textColor field for dialogues.
Added support to reload some data registries using /reload:
Molang scripts
Callbacks
Spawn Detail Presets
Spawn Pools
Spawn Rules
Cosmetic Items
Dialogues
Fossils
Natural Materials
Action Effects
Mechanics
Unlockable Wallpapers
Starter Data
Fixed cobblemon:reel_in_pokemon criteria not working when used together with a baitId.
Also changed the default from cobblemon:empty_bait to any.
The previous default is still available by using the above as baitId.
Added support for species-specific move action effects, using the format {move_id}_{species}.json.
Added look_at_entity_types variable for look_at_entities to specify what entity type or entity tag to look at.
Added various functions to q.file for JSON file handling in Molang, strictly for ./config and ./data folders that have /molang/ in the path:
q.file.save(<path>, <struct>) Saves to the given file path with the given variable struct.
q.file.load(<path>) Loads a variable struct from the given path, or gets it from the cache if it's already been loaded.
q.file.exists(<path>) Returns 1 if the given file path exists.
q.file.clear(<path>) Clears the given file from the cache.
Using q.run_script will now allow additional arguments which will be put into c.arg_1, c.arg_2, etc.
Removed many NPC presets that now exist as behaviours. This is a breaking change if you are using NPCs with these presets.
NPCs with these presets should be modified to instead list under "behaviours" all the equivalent behaviours.
Added "callback" support on PokemonEntity and NPCEntity that allows Molang scripts to be executed in response to certain scenarios.
Renamed the fishing_baits datapack folder to spawn_bait_effects.
Added seasonings datapack folder for controlling usable items in the campfire pot and what colour and flavour they apply.
Added campfire pot recipe type.
Added marks datapack folder.
Added unlockable_pc_box_wallpapers datapack folder for wallpapers that need to be unlocked before they're usable.
Wallpapers are loaded from assets/<namespace>/textures/gui/pc/wallpaper/ and all wallpapers in this folder are available to the client to choose by default.
Added optional filePath parameter to data and save_data Molang functions to allow for global stores (ex. ../global/). Path must end in a forward slash.
Added many new Molang functions to pokemon, entity, and player structs.
Added Molang function q.delete_variable(<struct>, <variable_name>) to delete a value from a variable structure in Molang data.
Added Molang function q.delete_variables(<struct>) to delete all values from a variable structure in Molang data.
Renamed Molang Flows to Molang Callbacks because that's less esoteric.
Adds Molang Callbacks for the following events:
poke_ball_capture_calculated
evolution_tested
evolution_accepted
evolution_completed
pokemon_healed
pokemon_scanned
berry_harvest
loot_dropped
pokemon_seen
collect_egg
hatch_egg
experience_gained_pre
experience_gained_post
pokemon_catch_rate
bait_set
bait_set_pre
bait_consumed
pokerod_cast_pre
pokerod_cast_post
pokerod_reel
bobber_spawn_pokemon_pre
pokemon_aspects_changed
friendship_updated
change_pc_box_wallpaper_event_pre
change_pc_box_wallpaper_event_post
fullness_updated
server_stopping
starter_chosen
ev_gained
pokemon_released
pokemon_nicknamed
held_item_pre
held_item_post
shoulder_mounted
trade_completed
bobber_spawn_pokemon_post
pokemon_entity_spawn
fossil_revived
player_tick_pre
player_tick_post
advancement_earned
right_clicked_entity
right_clicked_block
player_died
wallpaper_unlocked
Added q.has_argument(<argument_name>, [argument_value]) Molang function to several battle-related action effect contexts.
Added q.has_argument_at(<index>, [argument_value]) Molang function to several battle-related action effect contexts.
Added q.hit_count Molang function to move action effect contexts.
Added is_included, to_lower, to_upper, and string_length as available Molang functions.
Added q.split_string(<text>, <delimiter/comma>) Outputs an array with the divided text.
Particles
Added new/updated particles for the following moves:
Absorb
Acid
Acid Spray
Aerial Ace
Amnesia
Aurora Beam
Bite
Body Slam
Bubble
Bubble Beam
Bulldoze
Bullet Punch
Close Combat
Confusion
Crunch
Cotton Guard
Double Team
Dragon Claw
Egg Bomb
Ember
Eruption
Explosion
Fire Blast
Fire Punch
Fire Spin
Flame Burst
Flame Charge
Flamethrower
Flame Wheel
Frost Breath
Frustration
Giga Drain
Growl
Haze
Hidden Power
Horn Attack
Hyper Fang
Hypnosis
Ice Beam
Ice Punch
Ice Shard
Icy Wind
Infestation
Kinesis
Lava Plume
Leech Life
Leech Seed
Leer
Lick
Magical Leaf
Mega Drain
Minimize
Mist
Mud Bomb
MudSport
Mystical Fire
Nasty Plot
Poison Fang
Poison Gas
Poison Powder
Population Bomb
Pound
Powder
Powder Snow
Present
Protect
Psybeam
Psychic
Pursuit
Quick Attack
Rage Powder
Razor Leaf
Return
Rock Throw
Sand Attack
Scary Face
Scratch
Seed Bomb
Seismic Toss
Self Destruct
Shadow Ball
Shadow Claw
Sing
Sleep Powder
Sludge Bomb
Smokescreen
Spike
Spore
Stomp
String Shot
Stun Spore
Super Fang
Swords Dance
Tackle
Tail Whip
Thunder
Thunder Punch
Thunderbolt
Thunder Shock
Thunder Wave
Toxic
Water Gun
Water Pulse
Water Sport
Will-O-Wisp
Withdraw
Localization
Updated translations for:
German, Spanish, Mexican Spanish, French, Canadian French, Japanese, Korean, Portuguese, Brazilian Portuguese, Ukrainian, Russian, Thai, Vietnamese, Simplified Chinese, Traditional Chinese
We've had many new translators join to help us out, so a heartfelt thank you to both our existing translators and all the new translators that have worked so hard to bring the mod to more of the world! <3