From acebc35d3ffc3739fce348fd2b8a3f865a355d75 Mon Sep 17 00:00:00 2001 From: Neovitalism <70066544+Neovitalism@users.noreply.github.com> Date: Sun, 16 Nov 2025 04:10:45 -0600 Subject: [PATCH 01/12] Who are we if not consistent? MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before, this property was called `PokemonFlagProperty`, had the key `tag`, and checked pokémon's labels. It was also in a package by itself. Now, it's moved down into the properties package, renamed to LabelProperty, and the key "label" was added, keeping "tag" as a secondary for those that are using it currently. --- .../kotlin/com/cobblemon/mod/common/Cobblemon.kt | 4 ++-- .../PokemonFlagProperty.kt => LabelProperty.kt} | 12 ++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) rename common/src/main/kotlin/com/cobblemon/mod/common/pokemon/properties/{tags/PokemonFlagProperty.kt => LabelProperty.kt} (55%) diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt b/common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt index ad9fbd5320..ad2331d5db 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/Cobblemon.kt @@ -93,7 +93,7 @@ import com.cobblemon.mod.common.pokemon.feature.SlowpokeTailRegrowthSpeciesFeatu import com.cobblemon.mod.common.pokemon.feature.TagSeasonResolver import com.cobblemon.mod.common.pokemon.helditem.CobblemonHeldItemManager import com.cobblemon.mod.common.pokemon.properties.* -import com.cobblemon.mod.common.pokemon.properties.tags.PokemonFlagProperty +import com.cobblemon.mod.common.pokemon.properties.LabelProperty import com.cobblemon.mod.common.pokemon.stat.CobblemonStatProvider import com.cobblemon.mod.common.starter.CobblemonStarterHandler import com.cobblemon.mod.common.util.* @@ -314,7 +314,7 @@ object Cobblemon { CustomPokemonProperty.register(UncatchableProperty) CustomPokemonProperty.register(BattleCloneProperty) - CustomPokemonProperty.register(PokemonFlagProperty) + CustomPokemonProperty.register(LabelProperty) CustomPokemonProperty.register(HiddenAbilityPropertyType) CustomPokemonProperty.register(AspectPropertyType) CustomPokemonProperty.register(UnaspectPropertyType) diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/pokemon/properties/tags/PokemonFlagProperty.kt b/common/src/main/kotlin/com/cobblemon/mod/common/pokemon/properties/LabelProperty.kt similarity index 55% rename from common/src/main/kotlin/com/cobblemon/mod/common/pokemon/properties/tags/PokemonFlagProperty.kt rename to common/src/main/kotlin/com/cobblemon/mod/common/pokemon/properties/LabelProperty.kt index a6254ab18c..dea754a350 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/pokemon/properties/tags/PokemonFlagProperty.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/pokemon/properties/LabelProperty.kt @@ -6,19 +6,15 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -package com.cobblemon.mod.common.pokemon.properties.tags +package com.cobblemon.mod.common.pokemon.properties import com.cobblemon.mod.common.api.properties.CustomPokemonPropertyType -import com.cobblemon.mod.common.pokemon.properties.StringProperty -object PokemonFlagProperty : CustomPokemonPropertyType { - - private const val KEY = "tag" - - override val keys = setOf(KEY) +object LabelProperty : CustomPokemonPropertyType { + override val keys = setOf("label", "tag") override val needsKey = true - override fun fromString(value: String?) = if (value == null) null else StringProperty(KEY, value, { _, _ -> }, { pokemon, underlyingValue -> pokemon.hasLabels(underlyingValue) }) + override fun fromString(value: String?) = if (value == null) null else StringProperty(keys.first(), value, { _, _ -> }, { pokemon, underlyingValue -> pokemon.hasLabels(underlyingValue) }) override fun examples() = emptySet() } \ No newline at end of file From 116a93d8ccb1d7d0de101ed597fa411c4670c210 Mon Sep 17 00:00:00 2001 From: Neovitalism <70066544+Neovitalism@users.noreply.github.com> Date: Sun, 16 Nov 2025 04:19:32 -0600 Subject: [PATCH 02/12] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dca2bd3d78..c1bf0afacc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,7 @@ - Added `defaultKeyItems` config option to specify which key items players always have. - Added `scale_modifier` property to PokemonProperties to modify the scale of the Pokemon. - Added Tasty Tail which you can get from Slowpokes if you happen to have a pair of shears. They don't mind, we asked. +- Added `label` as an alternate key to the `tag` property. ### Pokémon Added From 339038956d36f3bc1745e5c12b5889c43d46b48d Mon Sep 17 00:00:00 2001 From: Neovitalism <70066544+Neovitalism@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:09:21 -0600 Subject: [PATCH 03/12] Support for deserialization from any key ...I think. --- .../feature/ChoiceSpeciesFeatureProvider.kt | 18 +++++----- .../api/pokemon/feature/FlagSpeciesFeature.kt | 34 +++++++++++++------ .../api/pokemon/feature/IntSpeciesFeature.kt | 16 ++++----- 3 files changed, 39 insertions(+), 29 deletions(-) diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/ChoiceSpeciesFeatureProvider.kt b/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/ChoiceSpeciesFeatureProvider.kt index 3de46981cb..c607813dca 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/ChoiceSpeciesFeatureProvider.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/ChoiceSpeciesFeatureProvider.kt @@ -80,7 +80,9 @@ open class ChoiceSpeciesFeatureProvider( internal constructor(): this(emptyList()) - override fun get(pokemon: Pokemon) = pokemon.getFeature(keys.first()) + override fun get(pokemon: Pokemon): StringSpeciesFeature? { + return pokemon.features.filterIsInstance().find { it.name in keys } + } override fun invoke(pokemon: Pokemon): StringSpeciesFeature? { val existing = get(pokemon) @@ -101,15 +103,15 @@ open class ChoiceSpeciesFeatureProvider( } override fun invoke(nbt: CompoundTag): StringSpeciesFeature? { - return if (nbt.contains(keys.first())) { - StringSpeciesFeature(keys.first(), "").also { it.loadFromNBT(nbt) } - } else null + val key = keys.find { nbt.contains(it) } + if (key == null) return null + return StringSpeciesFeature(keys.first(), "").also { it.loadFromNBT(nbt) } } override fun invoke(json: JsonObject): StringSpeciesFeature? { - return if (json.has(keys.first())) { - StringSpeciesFeature(keys.first(), "").also { it.loadFromJSON(json) } - } else null + val key = keys.find { json.has(it) } + if (key == null) return null + return StringSpeciesFeature(keys.first(), "").also { it.loadFromJSON(json) } } override fun fromString(value: String?): StringSpeciesFeature? { @@ -131,7 +133,7 @@ open class ChoiceSpeciesFeatureProvider( override fun provide(properties: PokemonProperties): Set { return if (isAspect) { - val feature = properties.customProperties.filterIsInstance().find { it.name == keys.first() } + val feature = properties.customProperties.filterIsInstance().find { it.name in keys } if (feature != null) { setOf(getAspect(feature)) } else { diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/FlagSpeciesFeature.kt b/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/FlagSpeciesFeature.kt index c4c4e71e0c..0329cdf591 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/FlagSpeciesFeature.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/FlagSpeciesFeature.kt @@ -132,7 +132,9 @@ class FlagSpeciesFeatureProvider : SynchronizedSpeciesFeatureProvider(keys.first()) + override fun get(pokemon: Pokemon): FlagSpeciesFeature? { + return pokemon.features.filterIsInstance().find { it.name in keys } + } override fun invoke(pokemon: Pokemon): FlagSpeciesFeature? { return get(pokemon) @@ -144,15 +146,15 @@ class FlagSpeciesFeatureProvider : SynchronizedSpeciesFeatureProvider { - return if (isAspect && pokemon.getFeature(keys.first())?.enabled == true) { - setOf(keys.first()) + return if (isAspect) { + val feature = pokemon.features.filterIsInstance().find { it.name in keys } + if (feature != null && feature.enabled) { + setOf(keys.first()) + } else { + emptySet() + } } else { emptySet() } } override fun provide(properties: PokemonProperties): Set { - return if (isAspect && properties.customProperties.filterIsInstance().find { it.name == keys.first() }?.enabled == true) { - setOf(keys.first()) + return if (isAspect) { + val feature = properties.customProperties.filterIsInstance().find { it.name in keys } + if (feature != null && feature.enabled) { + setOf(keys.first()) + } else { + emptySet() + } } else { emptySet() } diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/IntSpeciesFeature.kt b/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/IntSpeciesFeature.kt index c472ee4698..01c5c714ef 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/IntSpeciesFeature.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/IntSpeciesFeature.kt @@ -138,19 +138,15 @@ class IntSpeciesFeatureProvider : SynchronizedSpeciesFeatureProvider().find { it.name in keys } From 46d278ca55d769d45b39b5e742bdac7c62a1d820 Mon Sep 17 00:00:00 2001 From: Neovitalism <70066544+Neovitalism@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:18:02 -0600 Subject: [PATCH 04/12] key \:) --- .../api/pokemon/feature/ChoiceSpeciesFeatureProvider.kt | 4 ++-- .../mod/common/api/pokemon/feature/FlagSpeciesFeature.kt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/ChoiceSpeciesFeatureProvider.kt b/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/ChoiceSpeciesFeatureProvider.kt index c607813dca..fd93db10fd 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/ChoiceSpeciesFeatureProvider.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/ChoiceSpeciesFeatureProvider.kt @@ -105,13 +105,13 @@ open class ChoiceSpeciesFeatureProvider( override fun invoke(nbt: CompoundTag): StringSpeciesFeature? { val key = keys.find { nbt.contains(it) } if (key == null) return null - return StringSpeciesFeature(keys.first(), "").also { it.loadFromNBT(nbt) } + return StringSpeciesFeature(key, "").also { it.loadFromNBT(nbt) } } override fun invoke(json: JsonObject): StringSpeciesFeature? { val key = keys.find { json.has(it) } if (key == null) return null - return StringSpeciesFeature(keys.first(), "").also { it.loadFromJSON(json) } + return StringSpeciesFeature(key, "").also { it.loadFromJSON(json) } } override fun fromString(value: String?): StringSpeciesFeature? { diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/FlagSpeciesFeature.kt b/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/FlagSpeciesFeature.kt index 0329cdf591..8cd398489c 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/FlagSpeciesFeature.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/api/pokemon/feature/FlagSpeciesFeature.kt @@ -148,13 +148,13 @@ class FlagSpeciesFeatureProvider : SynchronizedSpeciesFeatureProvider Date: Tue, 25 Nov 2025 21:37:57 -0600 Subject: [PATCH 05/12] Restores Combee pathing through leaves --- .../cobblemon/mod/common/pokemon/ai/OmniPathNodeMaker.kt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/pokemon/ai/OmniPathNodeMaker.kt b/common/src/main/kotlin/com/cobblemon/mod/common/pokemon/ai/OmniPathNodeMaker.kt index 143a95a672..51b8f19af1 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/pokemon/ai/OmniPathNodeMaker.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/pokemon/ai/OmniPathNodeMaker.kt @@ -562,8 +562,8 @@ class OmniPathNodeMaker : NodeEvaluator() { //// PathType.WALKABLE //// } else if (blockState.canPathfindThrough(world, pos, NavigationType.AIR) && !blockStateBelow.isSideSolid(world, below, Direction.UP, SideShapeType.FULL)) { //// PathType.OPEN -// } else if (blockState.`is`(BlockTags.LEAVES) && blockState.block == CobblemonBlocks.SACCHARINE_LEAVES && canPathThroughLeaves()) { -// return PathType.OPEN + if (canPathThroughLeaves() && blockState.block == CobblemonBlocks.SACCHARINE_LEAVES) + return PathType.OPEN // } else PathType.BLOCKED // This is the 1.6.1 logic but with some optimizations @@ -633,9 +633,6 @@ class OmniPathNodeMaker : NodeEvaluator() { pfContext, x, y, z, sizeX, sizeY, sizeZ, canOpenDoors, canPassDoors, set, PathType.BLOCKED, BlockPos(x, y, z), returnedEarlyPathType ) - if (PathType.LEAVES in set) { - return PathType.OPEN - } if (PathType.FENCE in set) { return PathType.FENCE @@ -755,7 +752,7 @@ class OmniPathNodeMaker : NodeEvaluator() { } else if (type == PathType.RAIL && block !is BaseRailBlock && pfContext.getCachedBlockState(pos.below()).block !is BaseRailBlock) { PathType.UNPASSABLE_RAIL } else if (type == PathType.LEAVES) { - if (blockState.block === CobblemonBlocks.SACCHARINE_LEAVES && canPathThroughLeaves()) { + if (canPathThroughLeaves() && blockState.block === CobblemonBlocks.SACCHARINE_LEAVES) { PathType.OPEN } else { PathType.BLOCKED From a8949cf1f9407ec464469480d1bc6df340453820 Mon Sep 17 00:00:00 2001 From: JazzMcNade Date: Tue, 25 Nov 2025 21:49:38 -0600 Subject: [PATCH 06/12] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 756fadca7e..88829ba9f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ - Fix player suffocation on vanilla mounts experienced on some worlds. - Stop passengers from hearing the shiny noise of a ridden shiny Pokémon. - Fix a glitch where friendship would reset to the default value when evolving a Pokémon. +- Fix an issue in the OmniPathNodeMaker that prevent Combees from pathing into Saccharine leaves. ### Developer From 25ce784a6090508aa79bdbf41e38fa9a7549876f Mon Sep 17 00:00:00 2001 From: Neovitalism <70066544+Neovitalism@users.noreply.github.com> Date: Wed, 3 Dec 2025 10:17:48 -0600 Subject: [PATCH 07/12] Hopefully fixes changelog Idk why gitlab didn't detect that when merging main --- CHANGELOG.md | 451 --------------------------------------------------- 1 file changed, 451 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb6701fa9d..8d3608d26f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,459 +2,8 @@ ## [1.7.2 (MONTH Xth, YEAR)](#1-7-2) ### Additions -- Added `/npcdelete` uuid parameter support and usuable to console -- Added `/spectateBattle ` command to spectate battles without having to manually walk up to the target. -- Added an in-game configuration screen, allowing all settings from `main.json` to be edited directly in-game. -- Added `/cobblemonconfig reload` command to reload `main.json` configuration. **Note:** Some settings require a server restart to take effect; use this command cautiously. -- Added `blacklisted_items_to_hold` and `whitelisted_items_to_hold` tags to allow for controlling which items players can give to their Pokémon. If the whitelist is empty, it will consider all item as allowed (unless they are in the blacklist). -- Pokémon now follow the mouse cursor on the Summary screen, with an option to disable this in the settings. -- Added Datapackable Item interactions with Pokemon -- Pokémon's held items can now be rendered, with a visibility toggle in the Summary screen. -- Added cosmetic item functionality for Pokémon. Certain cosmetic items can be given to applicable Pokémon via the interact menu. - - Added the various log blocks as cosmetic items for Timburr and Komala. - - Added cosmetics for Spoink, Gurdurr, Conkeldurr, Squirtle Line, Sneasler, Sandile line, Treecko line, Braixen, Delphox, and Dragonite. - - Added Gilded Chest cosmetics for Chest Gimmighoul and Gholdengo -- Added `visibility/hidden`, `visibility/hat` and `visibility/face` tags to control where and how certain items are rendered. -- Added Pokémon markings, toggleable within the summary. -- Added `/boxcount` command to change PC boxes amount -- Added `/transformmodelpart (position|rotation|scale) ` command that can add transformations to a pokemon's model part. - - The player executing the command must be facing the target pokemon entity. Transformations are not persistent and will revert when resources are reloaded. -- Added `legacy` and `special` sourced moves to Pokémon. -- Added lang keys for all moves and abilities up to Generation 9. -- Added `translucent_cull` boolean option into resolver's layer to allow for translucent textures with culling -- Added [LambDynamicLights](https://modrinth.com/mod/lambdynamiclights) support for items held by Pokémon, evolution stone blocks, evolution stone items, Pokédex, Luminous Moss, Flame Orb, and Magmarizer. -- Added the Clear Amulet, Grip Claw, Lagging Tail, Luminous Moss, Metal Alloy, Scroll of Darkness, Scroll of Waters -- Added Recipes for Masterpiece Cup, Eject Pack. -- Added modification to Minecraft Creative Inventory search to account for item names that contain `poké` when input contains `poke`. -- Added Campfire Pot as well as loads of new food items (Poke Puffs, Ponigiri, Sinister Tea, etc) -- Added Hearty Grains, a new crop used in the new cooking mechanic -- Added Tatami blocks and Tatami Mat blocks, made from Hearty Grain, for decorating builds -- Added `/pcsearch ` command that searches for a specific Pokémon within a player's PC. -- Added `/pctake ` command that takes a specific Pokémon from a player's PC. Removes the pokemon if target is self or ran from the server. -- Added Hyper Training items (IV Modification) as well as some additional candy items to do so (Health Candy, Sickly Candy) -- Added Galarica Nut Bushes -- Many Pokémon (mostly cats) are now feared by phantoms -- Combees are now capable of gathering nectar from flowers and delivering it to either Saccharine leaves or hives. (Hive interactions are restricted to wild Combees) -- Lightning is now affected by a Pokemon's ability/typing - - Pokémon with the ability Lightning Rod draw in lightning similar to a lightning rod block albeit with a lower priority and range, gain immunity to lightning damage, and receive a temporary damage buff. - - Pokémon with the ability Motor Drive are immune to lightning damage and receive a temporary speed buff when struck by lightning - - Pokémon with the ability Volt Absorb are immune to lightning damage and receive Instant Health II for a short duration - - Ground type Pokémon are immune to lightning damage -- Added functionality to Everstone when held by a Pokémon; suppresses evolution notification and hides evolve button in summary interface. -- Added optional `filePath` parameter to MoLang functions to allow for global stores (ex. `../global/`). Path must end in a forward slash. -- Added new optional property `attachment_options` for most EmitterShapes to be attached to the locator/entities scale, rotation, and/or position. Position is true by default. -- Galarica Nut bushes now generate on beaches. -- Some Pokémon now pitch their bodies in the direction they're moving. -- Added new advancements Didn't Stop To Think, We Need To Cook, and Pokémon Jockey!. -- Berries can now be smelted into their respective dyes. -- Added Syrupy Apples. -- Added `/runmolang [||]` command 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 new 69th berry, Eggant. -- Added bubble quirk to Kingler; like Krabby, Kingler will blows bubbles during dusk. -- Added `.Pre` and `.Post` to the following events: - - `PokemonRecallEvent` - - `TradeEvent` -- Added a new gamerule, 'healerHealsPC', when set to true a successful use of a healer will also heal all of the Pokemon in that player's PC. -- Mooshtanks will switch between their red and brown variant when hit by lightning -- Smeargle spawns with differing tail colour depending on its [Characteristic](https://bulbapedia.bulbagarden.net/wiki/Characteristic) stat -- Added smooth level-up animations to the party overlay to replace chat messages. -- Added `min_perfect_ivs` property to PokemonProperties to specify the minimum number of perfect IVs of the Pokemon. -- Added `defaultKeyItems` config option to specify which key items players always have. -- Added `scale_modifier` property to PokemonProperties to modify the scale of the Pokemon. -- Added Tasty Tail which you can get from Slowpokes if you happen to have a pair of shears. They don't mind, we asked. - Added `label` as an alternate key to the `tag` property. -### Pokémon Added - -#### Gen 2 -- Marill -- Azumarill -- Hoppip -- Skiploom -- Jumpluff -- Dunsparce -- Togepi -- Togetic -- Unown -- Houndour -- Houndoom -- Ho-Oh -- Lugia -- Alola Bias Pichu (built-in resourcepack) - -#### Gen 3 -- Azurill -- Meditite -- Medicham -- Electrike -- Manectric -- Spoink -- Grumpig -- Swablu -- Altaria -- Snorunt -- Glalie -- Shuppet -- Banette -- Latias -- Latios - -#### Gen 4 -- Bronzor -- Bronzong -- Croagunk -- Toxicroak -- Froslass -- Glameow -- Purugly -- Skorupi -- Drapion -- Togekiss - -#### Gen 5 -- Pansage -- Simisage -- Pansear -- Simisear -- Panpour -- Simipour -- Munna -- Musharna -- Blitzle -- Zebstrika -- Drilbur -- Excadrill -- Trubbish -- Garbodor -- Gothita -- Gothorita -- Gothitelle -- Solosis -- Duosion -- Reuniclus -- Tynamo -- Eelektrik -- Eelektross -- Axew -- Fraxure -- Haxorus -- Mienfoo -- Mienshao -- Sewaddle -- Swadloon -- Leavanny -- Druddigon -- Minccino -- Cinccino -- Vanillite -- Vanillish -- Vanilluxe - -#### Gen 6 -- Skiddo -- Gogoat -- Espurr -- Meowstic -- Inkay -- Malamar -- Hawlucha -- Dedenne -- Noibat -- Noivern -- Furfrou - - You can change Furfrou's form by using shears on it while it holds a certain dye in its cosmetic slot. - -#### Gen 7 -- Yungoos -- Gumshoos -- Drampa -- Alolan Grimer -- Alolan Muk -- Togedemaru - -#### Gen 8 -- Skwovet -- Greedent -- Chewtle -- Drednaw -- Toxel -- Toxtricity -- Morpeko -- Silicobra -- Sandaconda -- Sinistea -- Polteageist -- Galarian Corsola -- Cursola -- Mr. Rime -- Galarian Mr. Mime -- Clobbopus -- Grapploct -- Galarian Weezing - -#### Gen 9 -- Smoliv -- Dolliv -- Arboliva -- Tarountula -- Spidops -- Orthworm -- Dudunsparce -- Cyclizar -- Poltchageist -- Sinistcha -- Capsakid -- Scovillain -- Tadbulb -- Bellibolt -- Toedscool -- Toedscruel -- Rellor -- Rabsca -- Bramblin -- Brambleghast - -### Animation updates for the following Pokémon -- Garchomp -- Tropius -- Nosepass -- Probopass -- Sneasel -- Weavile -- Sneasler -- Braixen -- Delphox -- Cinderace -- Kangaskhan -- Gossifleur -- Eldegoss -- Stonjourner -- Wailmer -- Lechonk -- Oinkologne -- Dratini -- Dragonair -- Dragonite -- G. Corsola -- Cursola -- Dunsparce -- Dudunsparce (both forms) -- Porygon -- Porygon2 -- Porygon-Z -- Wattrel -- Kilowattrel -- Golurk -- Spinarak -- Ariados -- Wyrdeer -- Tyrantrum -- Pidove -- Tranquill -- Unfezant -- Beldum -- Metang -- Metagross -- Plusle -- Minun -- Murkrow -- Honchkrow -- Larvesta -- Volcarona -- Dwebble -- Crustle -- Mr. Mime -- Flygon -- Pichu -- Pikachu -- Raichu -- Alolan Raichu -- Espathra -- Abra -- Kadabra -- Alakazam -- Deino -- Zweilous -- Hydreigon -- Slaking -- Klink -- Klang -- Klinklang -- Baltoy -- Claydol -- Mamoswine -- Rufflet -- Braviary -- Girafarig -- Farigiraf -- Rookidee -- Corvisquire -- Corviknight -- Venipede -- Whirlipede -- Scolipede -- Venusaur -- Parasect -- Bastiodon -- Amaura -- Varoom -- Revavroom -- Bouffalant -- Lickilicky -- Blaziken -- Rhyhorn -- Rhydon -- Rhyperior -- Tauros -- Tauros - Paldea Aqua -- Tauros - Paldea Blaze -- Tauros - Paldea Combat -- Dewgong -- Corphish (updated placeholders for crustaceous tripod gait legs) -- Crawdaunt (updated placeholders for crustaceous bipedal legs) -- Dragapult -- Camerupt -- Relicanth -- Heracross -- Salamence -- Staraptor -- Dusknoir -- Arcanine -- Carvanha -- Sharpedo -- Mimikyu -- Dewgong -- Mime Jr -- Gyarados -- Lapras - -### Model updates for the following Pokémon -- Cleffa -- Clefairy -- Clefable -- Gyarados -- Dragonite -- Eevee -- Vaporeon -- Jolteon -- Flareon -- Espeon -- Umbreon -- Leafeon -- Glaceon -- Sylveon -- Treecko -- Grovyle -- Sceptile -- Honchkrow -- Gible -- Gabite -- Garchomp -- Pidgeot -- Nosepass -- Probopass -- Kangaskhan -- Scorbunny -- Raboot -- Cinderace -- Magnemite -- Magneton -- Magnezone -- Beldum -- Metang -- Metagross -- Hoothoot -- Noctowl -- Teddiursa -- Ursaring -- Ursaluna -- Heatmor -- Bouffalant -- Sigilyph -- Sharpedo -- Maractus -- Clodsire -- Scyther -- Scizor -- Cacturne -- Taillow -- Swellow -- Seel -- Dewgong -- Honedge -- Doublade -- Aegislash -- Drowzee -- Hypno -- Mudkip -- Marshtomp -- Swampert -- Shelmet -- Escavalier -- Klink -- Klank -- Klinklang -- Spinarak -- Ariados -- Pidove -- Tranquill -- Unfezant -- Sobble -- Drizzile -- Inteleon -- Plusle -- Minun -- Murkrow -- Zorua -- Zoroark -- Mime.Jr -- Mr. Mime -- Pichu -- Pikachu -- Raichu -- Alolan Raichu -- Dusknoir -- Deino -- Zweilous -- Hydreigon -- Dreepy -- Drakloak -- Dragapult -- Mamoswine -- Rookidee -- Corvisquire -- Corviknight -- Venipede -- Whirlipede -- Scolipede -- Farigiraf -- Staryu -- Starmie -- Gimmighoul -- Gholdengo -- Starly -- Staravia -- Staraptor -- Varoom -- Revavroom -- Nickit -- Thievul -- Litwick -- Lampent -- Chandelure -- Rayquaza -- Aerodactyl -- Basculin -- Basculegion -- Shroodle -- Grafaiai -- Steelix -- Dratini -- Dragonair -- Dragonite -- Cutiefly -- Ribombee - ### Changes ### Fixes From 54e87634709457b813cb2a17311e5b0636f1ae0b Mon Sep 17 00:00:00 2001 From: JazzMcNade Date: Sat, 13 Dec 2025 21:17:59 -0600 Subject: [PATCH 08/12] Fixed a bug in which Combees could become stuck inside of leaves --- CHANGELOG.md | 2 +- .../com/cobblemon/mod/common/entity/ai/OmniPathNavigation.kt | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ac816814e..c695b8d3a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,7 +33,7 @@ - Fix player suffocation on vanilla mounts experienced on some worlds. - Stop passengers from hearing the shiny noise of a ridden shiny Pokémon. - Fix a glitch where friendship would reset to the default value when evolving a Pokémon. -- Fix an issue in the OmniPathNodeMaker that prevent Combees from pathing into Saccharine leaves. +- Fixed an issue in the OmniPathNodeMaker/Navigation that prevent Combees from pathing into and out of Saccharine leaves. - Fixed orientation not getting reset after crashing while flying and getting back on the Pokémon. - Fixed Furfrou not being trimmable on NeoForge. - Fixed shiny Pokémon not respecting the silent flag on spawn. diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/entity/ai/OmniPathNavigation.kt b/common/src/main/kotlin/com/cobblemon/mod/common/entity/ai/OmniPathNavigation.kt index 1e60e7c204..6a7a58c454 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/entity/ai/OmniPathNavigation.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/entity/ai/OmniPathNavigation.kt @@ -269,9 +269,6 @@ class OmniPathNavigation(val world: Level, val entity: Mob) : GroundPathNavigati // If we can fly and we're airborne, return the current Y position return vec.y } - if (world.getBlockState(blockPos).block == CobblemonBlocks.SACCHARINE_LEAVES && pather.canPathThroughSaccLeaves()) { - return vec.y + 0.5 - } return if ((canFloat()) && blockGetter.getFluidState(blockPos).`is`(FluidTags.WATER)) vec.y + 0.5 else super.getGroundY(vec) } From f6ad7ff865f5e33e2d6c5892dd6600dbe9d7eaf9 Mon Sep 17 00:00:00 2001 From: JazzMcNade Date: Wed, 17 Dec 2025 21:08:46 -0600 Subject: [PATCH 09/12] Fix changelog --- CHANGELOG.md | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c695b8d3a8..f5f262bc8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,20 +20,7 @@ - Ride sounds have been separated into stereo for passengers and mono for other players. Riding will now sound more spacious. ### Fixes -- Prevent displaying ride controls overlay to passengers. -- Fixed Poké Snack spawning sound positioning. -- Fix player suffocation on vanilla mounts experienced on some worlds. -- Stop passengers from hearing the shiny noise of a ridden shiny Pokémon. -- Ponigiri can no longer be eaten at full hunger. -- Medicinal Brew's Campfire Pot recipe now correctly displays that it can be made using an empty glass bottle or a filled bottle, -- Fix incorrect camera pivot on Bird, Jet, and Dolphin mounts. -- Fixed Combees not depositing honey upon leaving a hive if they entered with nectar. -- Safer reading of brain memories in hive mixins. -- Fixed crash when opening a PC box with certain wallpapers when using *VulkanMod*. -- Fix player suffocation on vanilla mounts experienced on some worlds. -- Stop passengers from hearing the shiny noise of a ridden shiny Pokémon. -- Fix a glitch where friendship would reset to the default value when evolving a Pokémon. -- Fixed an issue in the OmniPathNodeMaker/Navigation that prevent Combees from pathing into and out of Saccharine leaves. +- Fixed an issue in the OmniPathNodeMaker/Navigation that prevented Combees from pathing into and out of Saccharine leaves. - Fixed orientation not getting reset after crashing while flying and getting back on the Pokémon. - Fixed Furfrou not being trimmable on NeoForge. - Fixed shiny Pokémon not respecting the silent flag on spawn. From 645cf6191109838f109181e5754d380f34e8ef39 Mon Sep 17 00:00:00 2001 From: Spicy Date: Fri, 19 Dec 2025 19:48:27 -0600 Subject: [PATCH 10/12] Fixed the `run_script` Molang function to not fail if the environment's context is null. --- CHANGELOG.md | 1 + .../com/cobblemon/mod/common/api/molang/MoLangFunctions.kt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 610c2d5d60..06ac0a2739 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ - Fixed Soothe Bell not being properly tagged as a held item. - Fixed Mint Leaves not being usable for filling the Resurrection Machine. - Added Saccharine Boats and Saccharine Boat with Chests to relevant boat tags. +- Fixed the `run_script` Molang function to not fail if the environment's context is null. ### Developer - Changed the `owner` parameter in the `OwnerQueryRequirement` interface from `ServerPlayer` to `Player`. This method is now also called on the client to verify whether a Pokémon interaction succeeded, so make sure to update your implementations to handle both server and client contexts. diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/api/molang/MoLangFunctions.kt b/common/src/main/kotlin/com/cobblemon/mod/common/api/molang/MoLangFunctions.kt index b61556b143..e7fdcddc61 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/api/molang/MoLangFunctions.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/api/molang/MoLangFunctions.kt @@ -311,7 +311,7 @@ object MoLangFunctions { runtime.environment.variable = params.environment.variable val args = params.params.subList(1, params.params.size) runtime.environment.context = ContextStruct( - params.environment.context.map + args.mapIndexed { index, value -> "arg_${index + 1}" to value }.toMap() + (params.environment.context?.map ?: emptyMap()) + args.mapIndexed { index, value -> "arg_${index + 1}" to value }.toMap() ) val script = params.getString(0).asIdentifierDefaultingNamespace() // store the args in the From 118e8f6205231b9b2b58cd7dd0fb881184926738 Mon Sep 17 00:00:00 2001 From: lion Date: Sat, 20 Dec 2025 03:01:12 -0300 Subject: [PATCH 11/12] Add enable in-flight dismounting config --- CHANGELOG.md | 1 + .../keybind/keybinds/PartySendBinding.kt | 18 +++++++++--------- .../mod/common/config/CobblemonConfig.kt | 3 +++ .../riding/DismountPokemonPacketHandler.kt | 9 +++++++-- .../resources/assets/cobblemon/lang/en_us.json | 2 ++ 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 610c2d5d60..245d1f756e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ ### Changes - Ride sounds have been separated into stereo for passengers and mono for other players. Riding will now sound more spacious. +- Added a new config option, `Enable In-Flight Dismounting` (default: off), which lets you dismount while riding a Pokémon in the air. ### Fixes - Fixed an issue in the OmniPathNodeMaker/Navigation that prevented Combees from pathing into and out of Saccharine leaves. diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/client/keybind/keybinds/PartySendBinding.kt b/common/src/main/kotlin/com/cobblemon/mod/common/client/keybind/keybinds/PartySendBinding.kt index d871cb412e..26647b4229 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/client/keybind/keybinds/PartySendBinding.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/client/keybind/keybinds/PartySendBinding.kt @@ -143,18 +143,18 @@ object PartySendBinding : CobblemonBlockingKeyBinding( } private fun canAttemptDismount(player: LocalPlayer, selectedPartyPokemon: Pokemon?): Boolean { - if (player.vehicle !is PokemonEntity) return false - val vehicle = player.vehicle as PokemonEntity - if (player != vehicle.controllingPassenger) { - return true - } + val vehicle = player.vehicle as? PokemonEntity ?: return false + + if (player != vehicle.controllingPassenger) return true + val isAirRide = vehicle.ridingController?.context?.style == RidingStyle.AIR val hasLandRide = vehicle.rideProp.behaviours?.get(RidingStyle.LAND) != null - return if (isAirRide && hasLandRide) { - false - } else { - vehicle.pokemon.uuid == selectedPartyPokemon?.uuid + + if (!Cobblemon.config.enableInFlightDismounting && isAirRide && hasLandRide) { + return false } + + return vehicle.pokemon.uuid == selectedPartyPokemon?.uuid } private fun isRidingPokemon(player: LocalPlayer, ignoreControlling: Boolean = false): Boolean { diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/config/CobblemonConfig.kt b/common/src/main/kotlin/com/cobblemon/mod/common/config/CobblemonConfig.kt index 68e4b96b99..37176cc37c 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/config/CobblemonConfig.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/config/CobblemonConfig.kt @@ -329,6 +329,9 @@ class CobblemonConfig { @CobblemonConfigField(Category.Riding, lang = "remember_riding_camera", CLIENT) var rememberRidingCamera = false + @CobblemonConfigField(Category.Riding, lang = "enable_in_flight_dismounting", CLIENT) + var enableInFlightDismounting = false + @CobblemonConfigField(Category.Debug, lang = "enable_debug_keys", CLIENT) var enableDebugKeys = false diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/net/serverhandling/riding/DismountPokemonPacketHandler.kt b/common/src/main/kotlin/com/cobblemon/mod/common/net/serverhandling/riding/DismountPokemonPacketHandler.kt index 9f6a0f30f4..ec04d286ff 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/net/serverhandling/riding/DismountPokemonPacketHandler.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/net/serverhandling/riding/DismountPokemonPacketHandler.kt @@ -9,6 +9,7 @@ package com.cobblemon.mod.common.net.serverhandling.riding import com.cobblemon.mod.common.api.net.ServerNetworkPacketHandler +import com.cobblemon.mod.common.api.riding.RidingStyle import com.cobblemon.mod.common.entity.pokemon.PokemonEntity import com.cobblemon.mod.common.net.messages.server.riding.DismountPokemonPacket import net.minecraft.server.MinecraftServer @@ -25,12 +26,16 @@ object DismountPokemonPacketHandler : ServerNetworkPacketHandler Date: Sat, 20 Dec 2025 21:25:12 +1000 Subject: [PATCH 12/12] Edit pokemon_model.json --- .../assets/cobblemon/models/item/pokemon_model.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/common/src/main/resources/assets/cobblemon/models/item/pokemon_model.json b/common/src/main/resources/assets/cobblemon/models/item/pokemon_model.json index 7e811ccd83..35421e69d1 100644 --- a/common/src/main/resources/assets/cobblemon/models/item/pokemon_model.json +++ b/common/src/main/resources/assets/cobblemon/models/item/pokemon_model.json @@ -1,4 +1,7 @@ { "parent": "minecraft:builtin/entity", - "gui_light": "side" + "gui_light": "side", + "textures": { + "particle": "cobblemon:item/poke_balls/cherish_ball" + } } \ No newline at end of file