IntroductionIt has been almost 12 months since the last written update we did on the waiting glitch and what we were doing to combat it. Since then, we have seen reports of the waiting glitch drop down to almost none with only three known sources of the glitch remaining (all of them being caused by non-battle issues) most of which are actively being tackled. This first big push into combating the battle glitches in Pixelmon was a resounding success, and since then we have been trying to continue that work and as such improving the quality of battling as a whole in the Pixelmon experience.

So, what have we been doing to improve battles over the last year? At the end of the last post we identified that, the erroneously named, “unit testing” was the way forward. This was a mistake, as what we intended to identify was not specifically unit testing, but integration testing. The key difference here is that unit tests are designed to test things in isolation, whereas integration tests are for testing the interactions between many different components. Whilst our specific wording may have been incorrect, our intent was the correct one and since that post we have made hundreds of tests for various different parts of the battle engine, and a year after our first dev blog we have reached over 600 battle tests. These tests ensure that Pixelmon battles function as intended, such as checking abilities work, or moves do the correct amount of damage for the specific circumstance presented.

Here is a list of a few, of the many, battle bugs that we have found through writing our tests that were previously unidentified:
  • Imposter applying after Neutralising Gas leaves the field
  • Fixed ShieldsDown blocking all non-entry hazard statuses
  • Fixed owned Minior not changing to core form when out of battle
  • Fixed SlowStart not resetting count when NeutralizingGas disappears
And many, many, more.

Continuous Integration (CI)During this period we also released Pixelmon on the latest version of Minecraft for the first time in over five years. With this monumental achievement we also gained access to Mojang’s new Game Test suite. This system allows you to visualize tests in game, and also run a Minecraft server specifically with the task of running all the game tests. This is important as this allowed us to integrate the battle tests, and all of our other game tests, into our CI.

What is Continuous Integration (CI)? Continuous Integration is the practice of continually integrating code changes into a central place collaboratively. By integrating changes often, we can then test them together to ensure the end product functions as expected from the average player's perspective. To do this, we use a tool that we call pipelines, which trigger any time a developer uploads a change to the Pixelmon project.

This has been a big step forward for us in regards to battle stability. When a developer uploads their changes, we have our game tests run against it, ensuring the most fundamental parts of Pixelmon are working, even before we move to the manual testing phase. We also run each of our battle tests 1,000 times, which ensures we cover a lot of potentially unexpected behaviors, and randomness. For instance, these help cover situations that might change if you execute a critical hit, or if specific abilities have different, exceptional interactions together, which weren't previously observed before. Therefore, every time we make a change to the battle code, we simulate over 600,000 battles, and all in the span of less than 10 seconds.

Additional ImpactsWhilst this post is mainly focused on how we are improving battling for Pixelmon, and what we want to do going forward, it is important to acknowledge that the introduction of these game tests has also had impacts on other areas. For example, in the second half of 2023 we introduced a game test that attempts to load historic party and PC storage from every version of Pixelmon that we’ve released since August. This allows us to ensure that huge breaking issues, such as parties or PCs failing to load, are far less likely to happen in future releases we make. We've also implemented testing around simple things like catching Pixelmon to ensure we don't accidentally break commonly used functionality unexpectedly. This has been another huge step towards creating a much more stable, and reliable Pixelmon.

Next StepsOur first step going forward will be to continue expanding our extensive suite of tests moving forward. Whilst we are extremely proud that we have managed to write 600 battle tests and nearing 300 other game tests in just the last 5 months, our ambitions are much greater than that alone. We first want to make sure that we cover as much of the battle engine with testing as possible, to ensure that when we make large changes to the engine in the future we can be extremely confident that nothing has broken between versions.

Something that we feel is lacking, that doesn’t strictly impact the stability of the battles, is the user experience of battling in Pixelmon. Once battling is at a point of unparalleled stability an important goal is to make sure that our battle UI matches that stability, and improves the experience of battling as a whole. Whilst it is important for battles to function well, there’s no point in them functioning at all if they don’t look good or are not easy to use.

Following that, we are looking at making battles more extendable using the datapack systems that we’ve been utilizing so extensively for everything else. This starts with smaller things, such as introducing datapackable types, but then extends to much larger projects such as datapackable moves, abilities and held items.

Finally, the ultimate goal is still to make a system that can be replayed, and work in a transactional fashion for the optimal debugging and reviewing experience. However, this is a much longer term goal and is on a much different scale in terms of difficulty.

ConclusionOverall, battles in Pixelmon have come a long way over the last year and it is exciting to think where they may be at the end of the next. We will still continue to improve the stability and experience, whilst expanding with the new features as they come out. If you think you could assist us in our goals as you have unique battling knowledge then please apply to our team here.

  • The minimum Forge version for this update is 36.2.34 and is required for a Pixelmon client to run.
  • If using datapacks, consider refreshing every update for default datapack fixes from Pixelmon.

"Bark Bark Bark"


  • Added Flamigo.
  • Added Cetoddle.
  • Added Cetitan.
  • Added Fidough.
  • Added Dachsbun.

  • Added new Pokémon cries: Cetoddle, Dachsbun, Fidough, Chien-Pao, Houndstone, Veluza, Charcadet, Flamigo, Drakloak, Flutter Mane, Scream Tail, Tinkatink, Tinkaton, Tinkatuff, Ting-Lu and Roaring Moon.
  • Updated Machamp cry.

  • Added the Electric Gym Town to the Savanna Plateau and Shattered Savanna biomes.
    • Added Electric Gym structure.
    • Added Electric Town structures: Berry Farm A and B, Blacksmith, Church, Clutter A-F, Day Care, Farm A and B, House A-E, Poke Center, Poke Mart, Road A-D, Town Center A and B and TCG Shop.
    • Added Electric Gym Trainers to Electric Gym structure: Elite A-F, Grunt A-I and Gym Leader A-F.
  • Added the Dragon Gym Town to all Spruce biomes.
    • Added Dragon Gym structure.
    • Added Dragon Town structures: Berry Farm A and B, Blacksmith, Church, Clutter A-F, Day Care, Farm A and B, House A-E, Poke Center, Poke Mart, Road A-D, Town Center A and B and TCG Shop.
    • Added Dragon Gym Trainers to Dragon Gym structure: Elite A-F, Grunt A-I and Gym Leader A-F.
  • Updated Battle Arena structure layout to improve loot balance.
  • Moved the Water Gym Town from all Oceans to only Deep Ocean.
  • Moved the Steel Gym Town from all Savannas to only Savanna.

  • Added Fidough to the Plains category during the Morning.
  • Added Dachsbun to the Plains category during the Morning.
  • Added Cetoddle to Frozen Ocean, Snowy Beach, Shattered Glacier (BYG), Snowy Black Beach (BYG), Snowy Rocky Black Beach (BYG) during Day.
  • Added Cetitan to Frozen Ocean, Snowy Beach, Shattered Glacier (BYG), Snowy Black Beach (BYG), Snowy Rocky Black Beach (BYG) during Day. Added chance to spawn with group of Cetoddle.
  • Added Flamigo to Swamps during the Day on Land and in the Air. Added chance to spawn with a group of other Flamigo.

  • Changed the way attack animations are stored to be per battle:
    • This change should improve the speed of battle ticking on servers, as we no longer have to search through all current attack animations to find those related to the current battle.
    • This change should also improve the memory footprint of attack animations as they no longer need to store a backwards reference to the battle controller.
  • Changed battle ticking to be only done once per tick rather than once per level:
    • This will reduce the impact battles have on server performance.
    • This will reduce the likelihood of rare concurrency related issues.

  • 20502 Fixed client crashes caused by models or textures no longer being present after a resource reload from players switching servers, or resourcepacks, displaying 'missing texture' incorrectly.
  • 21296 Fixed Kingambit failing to drop Silver Ingots due to a typo.
  • Fixed Legendary spawn time randomization to modify the period by 40 percent instead of by frequency.
  • 21215 Fixed Pokémon that have the 'walksonwater' property dismounting their passenger when they touch water, such as Suicune.
  • 21565 Fixed crashes caused by parent species changing, such as a crashing after using `/pokebomb`.
  • Fixed wrong antennae color for regular Politoed.
  • 21325 Fixed Gym Signs failing to drop the item they had stored.
  • Fixed missing shiny palette for Mega-Gallade.
  • 21419 Fixed underground Pokémon spawning in the Nether, overtaking natural Nether spawns.
  • Fixed the Pokémon Editor wand failing to properly update ability slots when updating abilities of party Pokémon.
  • Fixed RequestCloseEditingPlayerPacket accessing the logical client from the server.
  • Fixed `/pokestats` accessing the logical client from the server.

  • 21419 Fixed a waiting bug caused by Pokéballs from the Bag falling into the void, failing the catch.
  • Fixed a waiting bug caused by Pokéballs falling far, failing the catch.
  • 21383 Fixed a waiting bug caused by fainting immediately after a mega-evolution animation mid-battle, allowing the opponent to move twice.
  • 21213 Fixed switch moves not doing any damage when used.
  • 21349 Fixed Nuzzle, Bolt-Strike, Mortal Spin, Bide, Triple Kick, Gear Grind, Hold Back, Plasma Fists, False Surrender, Double Shock and Comeuppance not being considered as contact moves.
  • Fixed Pokémon immediately attacking after their switch.
  • 21166 Fixed Overdrive failing to trigger Throat Spray.
  • 21360 Fixed leap move animations used by flying Pokémon causing server crashes.
  • Fixed Foul Play causing a rare server crash.
  • Fixed Opportunist crashing against AI with StatsEffect moves.
  • Fixed Wandering Spirit swapping when dynamaxed.
  • Fixed Wind Rider activating on Sandstorm.
  • Fixed Wind Rider preventing Tailwind's effect in double battles.
  • Fixed Cursed Body not disabling behind a Substitute.
  • Fixed Berserk not triggering if the final hit of a move didn't cross half HP.
  • Fixed Instruct not advancing turn timers for sleep and Truant.
  • Fixed Instruct always working despite sleep status.
  • Fixed Truant not blocking sleep.
  • Fixed Truant not loafing if gained after a mega-evolution.
  • Fixed Symbiosis moving items to Pokémon switching out.
  • Fixed Unaware not ignoring accuracy stages.
  • Fixed Foresight removing target's negative evasion stages.
  • Fixed Thick Fat reducing overall damage instead of the attacking stat.
  • Fixed start of battle effects not triggering unless starting in battle.
  • Fixed Trace to treat all ComingSoon abilities as null abilities.
  • Fixed crash issue with virtual battles via NPCs.
  • Fixed some Z-moves requiring the incorrectly typed Z-crystal, such as Captivate.
  • 21432 Fixed berries and healing items failing to work on Drowsy and Frostbite.
  • Fixed erratic battle camera movement by preventing the camera from updating its position if it has been set to be removed.
  • Fixed Water Spout ignoring Desolate Land's prevention of water attacks.
  • Fixed Eruption ignoring Primordial Sea's prevention of fire attacks.
  • Fixed Hydro Steam ignoring Desolate Land's prevention of water attacks.
  • Fixed Protosynthesis activating in Desolate Land's sun.
  • Fixed Life Orb applying recoil for each target damaged by a spread move.
  • 21376 Fixed Booster Energy activation restoring pre-level-cap stat points.
  • 21361 Fixed Trick-based moves remove the held items without being used.

  • Added an unbreedable check for Day Care parents server-side, preventing client-side exploits.
  • PlayerParticipant and TrainerParticipant now correctly post `SpawnPixelmonEntityForBattleEvent.Pre` and `SpawnPixelmonEntityForBattleEvent.Post` when switching Pokémon in battle.
  • TickHandlerBase#onTick now returns a boolean value for whether the tick handler should be removed or not, changing from returning void.
IntroductionOver the last few years, the Pixelmon team has begun to identify an issue surrounding difficulty and immersion when it comes to playing Pixelmon in the singleplayer experience. From playing in August of 2022, our experience was that it was incredibly difficult to get into the gameplay of Pixelmon outside of the standard Minecraft gameplay for a beginner. We felt this was important to address, as the singleplayer experience is “our game” whilst also constituting the majority of the playerbase, and so we wanted to make sure that the experience was fun and invoked the same emotions that the mainline games did for us.

Whilst the majority of ours attempts to solve this issue started in August of 2022, we have been aware of this issue and trying to introduce more Minecraft elements into Pixelmon dating all the way back to July of 2021 when we first introduced the cave level multiplier to the 1.12.2 version of Pixelmon. This setting was intended to making the caving experience in Pixelmon more interesting by introducing higher level Pokemon the further down into the caves you headed.

Initial AttemptsFrom our first look at this issue we clearly identified two areas that were the main problem. The first being that it was too difficult to start the game compared to a default Minecraft survival world, and the second that there was not inherently much challenge involved in Pixelmon at any point (mainly later game).

We found that it was too difficult to get into the gameplay, as we were searching food, unable to get enough apricorns to create the necessary balls to create a team, and spent hours walking around with only starter, having fainted and looking for a village. As a team, we agreed that this was a very boring and difficult way to start a game and would put most people off from play Pixelmon as it was a far more hardcore Minecraft experience than even in Hardcore Minecraft itself. To solve this, we introduced the setting to initially place the player in a village at the start of every new game and combined that with increasing the loot found in all structures in the game.

Then to solve the second problem that was initially identified, we introduced a reworked version of the Ultra Space where it was intended to be a more end game focused experience. To achieve this, we added higher weightings for the higher star raids, a mechanic that would remove you back to the overworld if your party fainted, several environmental dangers for your health and party, and finally always aggressive Pokemon that challenge you in horde battles. We thought that all of these combined would introduce a more difficult and challenging dimension that only players further along in their game would dare to enter.

Initial FeedbackAfter implementing the above solutions, we found that the progression curve was not as well paced as we had initially hoped. It became much easier to “cheese” elements of the initial gameplay, by getting an inventory of balls from the structures then spamming capturing higher level Pokemon outside of battle. Additionally, this meant certain functionality or features such as crafting PokeBalls was entirely unnecessary as it was much easier, faster and more efficient to find them from loot tables.

Future DirectionThis leads us to where we are today, with some significant changes in the latest version of Pixelmon (9.2.6) on 1.20.2. With the latest version we tweaked a lot of the settings previously mentioned in this article, such as the cave level multiplier, and preventing out of battle captures for Pokemon with a level higher than any Pokemon in your party. We also changed the PC blocks to only drop itself when broken with a silk touch pickaxe moving forward. This brings it inline with the Healer, and introduces a level of difficulty inline with other Minecraft features, such as the Ender Chest, as you can no longer switch out your party whenever you feel like it during the early stages of a game. However, the main feature of this version is the new “whiteout” screen once your entire party faints, and the loss of your inventory (when the keepInventory gamerule is disabled).

We feel that these changes will introduce a new risk to Pixelmon as you can no longer enter a cave, lose your entire team in a battle and then carry on your mining experience as if nothing happened. Another example, would be intentionally challenging gyms with under leveled Pokemon to skip over the challenge of the initial trainers and getting a free pass to the end.

By default this setting is disabled, for now, as we didn’t want to force such a drastic change on the entire player-base without additional feedback first.

The Pixelmon team intends to continue along this path of trying to make the gameplay experience more interesting as the game grows and evolves and we would love to hear your feedback on how these settings have impacted your gameplay going forward and where to look next.
  • The Java requirement for 1.20.2 is Java 17. This will come shipped with most launchers.
  • For manual installation, you may need to install a later JRE.
  • The minimum Forge version for this update is 48.0.30 and is required for a Pixelmon client Worlds from 1.16.5 may not work with newer versions of Minecraft. Consider backups before updating.
  • If using datapacks, consider refreshing every update for default datapack fixes from Pixelmon.

  • Added a new palette format to all palette-driven data.
  • Adds the `partyFaintRespawn` gamerule (disabled by default, and can be edited from the World Creation singleplayer screen):
  • When this is enabled players will be teleported back to their last respawn point when they have 0 battle capable pokemon remaining in their party.
  • If `keepInventory` gamerule is disabled the player will drop the items in their inventory.
  • This will not apply for players in creative.
  • This will not apply for players with a temporary mode party.
  • Added a button to the Discord Rich Presence allowing people to join the Pixelmon Discord.
  • Added support for servers to add a button to a link of their choosing in the rich presence under `config.yml`:`server-discord`, `discord-invite` and `server-name`, defaulting to blank - if the invite is invalid, the button will not show.
  • Added the Pumkin, Drash, Eggant, Strib, Nutpea, Ginema, Kuo, Yago, Touga, Niniku, and Topo berries to the creative menu.
  • Added bone mode debug `[F3+']`, showing both bones on Pokémon models and their name.
  • Added sphere model for bone display.
  • Added `elf` palette option to Christmas ball logic!
  • Adds tags for pulse, bite, bullet, dance, explosive, powder, punch, slicing, and wind moves.

  • Added Flutter Mane.
  • Added Capsakid.
  • Added Scovillain.
  • Added Flittle.
  • Added Espathra.

Cosmetic Palettes:
  • Added 'Christmas' Pichu.
  • Added 'Elf' Pichu.
  • Added 'Christmas' Pikachu.
  • Added 'Elf' Pikachu.
  • Added 'Christmas' Raichu.
  • Added 'Elf' Raichu.
  • Added 'Christmas' Dratini.
  • Added 'Elf' Dratini.
  • Added 'Christmas' Dragonair.
  • Added 'Elf' Dragonair.
  • Added 'Christmas' Dragonite.
  • Added 'Elf' Dragonite.
  • Added 'Christmas' Munchlax.
  • Added 'Elf' Munchlax.
  • Added 'Christmas' Snorlax.
  • Added 'Elf' Snorlax.
  • Added 'Christmas' Pawmi.
  • Added 'Elf' Pawmi.
  • Added 'Christmas' Pawmo.
  • Added 'Elf' Pawmo.
  • Added 'Christmas' Pawmot.
  • Added 'Elf' Pawmot.
  • Added 'Christmas' Iron Leaves.
  • Added 'Elf' Iron Leaves.
  • Added 'Christmas' Slitherwing.
  • Added 'Elf' Slitherwing.
  • Added 'Christmas' Mew.
  • Added 'Elf' Mew.

  • Added Water Town in Oceans, our most involved town yet!
  • Added Water Gym structure.
  • Added Water Town structures: Gym, Town Center, PokeCenter, PokeMart, Blacksmith, Church, Lighthouse A and B, House A-D, Kelp Farm a and B, Pier A-G, Fallback A-E, Deco A-H, Clutter A-T and Buoy A-C.
  • Added Water Gym Trainers to Water Gym structure: Elite A-F, Grunt A-I and Gym Leader A-F.
  • Added Swift Boat in Oceans.
  • Added Yacht Boat in Oceans.
  • Updated Fishing Boat, Magikarp Boat, Sail Boat and Submarine in Oceans.
  • Updated land Arc Chalice structure in Extreme Hills.
  • Updated Pumpkin House rarity for rarer, less common spawns.

Moves, Items and Abilities:
  • Added tests for Damp ability.
  • Added tests for Dancer ability.
  • Added tests for Dazzling ability.
  • Added tests for Delta Stream ability.
  • Added tests for Disguise ability.
  • Added tests for Zen Mode ability.
  • Added tests for Wind Rider ability.
  • Added tests for Wonder Guard ability.
  • Added tests for Wandering Spirit ability.
  • Added tests for Victory Star ability.
  • Added tests for Aftermath ability.
  • Added tests for Anger Point ability.
  • Added tests for Arena Trap ability.
  • Added tests for Battle Armor ability.
  • Added tests for Berserk ability.
  • Added tests for Cheek Pouch ability.
  • Added tests for Clear Body ability.
  • Added tests for Cloud Nine ability.
  • Added tests for Color Change ability.
  • Added tests for Comatose ability.
  • Added tests for Contrary ability.
  • Added tests for Cursed Body ability.
  • Added tests for Magic Guard ability.
  • Added tests for Magician ability.
  • Added tests for Intimidate ability.
  • Added tests for Shields Down ability.
  • Added tests for Simple ability.
  • Added tests for Slow Start ability.
  • Added tests for Contrary ability and Z-moves.
  • Added tests for Intrepid Sword ability.
  • Added tests for Liquid Ooze ability.
  • Added tests for Magic Bounce ability.
  • Added tests for Lightning Rod ability.
  • Added tests for Desolate Land ability.
  • Added tests for Dry Skin ability.
  • Added tests for Emergency Exit ability.
  • Added tests for Flash Fire ability.
  • Added tests for Frisk ability.
  • Added tests for Gluttony ability.
  • Added tests for Guard Dog ability.
  • Added tests for Immunity ability.
  • Added tests for Neutralizing Gas ability.
  • Added tests for Storm Drain ability.
  • Added tests for Sturdy ability.
  • Added tests for Suction Cups ability.
  • Added tests for Sturdy ability.
  • Added tests for Sword of Ruin ability.
  • Added tests for Synchronize ability.
  • Added tests for ScreenCleaner ability.
  • Added tests for SapSipper ability.
  • Added tests for Aromatherapy ability.
  • Added tests for HealBell ability.
  • Added tests for MagnetPull ability.
  • Added tests for Moxie ability.
  • Added tests for MultiScale ability.
  • Added tests for Mummy ability.
  • Added tests for Natural Cure ability.
  • Added tests for Own Tempo ability.
  • Added tests for Pastel Veil ability.
  • Added tests for Pick Pocket ability.
  • Added tests for Prankster ability.
  • Added tests for Primordeal Sea ability.
  • Added tests for Protosynthesis ability.
  • Added tests for Ripen ability.
  • Added tests for Rock Head ability.
  • Added tests for Rough Skin ability.
  • Added tests for SheerForce ability.
  • Added tests for SereneGrace ability.
  • Added tests for ShieldDust ability.
  • Added tests for PoisonTouch ability.
  • Added tests for ShellArmor ability.
  • Added tests for ShadowTag ability.
  • Added tests for Opportunist ability.
  • Added tests for Glaive Rush move.
  • Added tests for U-Turn move.
  • Added tests for Acupressure move.
  • Added tests for After You move.
  • Added tests for Assurance move.
  • Added tests for Aura Wheel move.
  • Added tests for Baton Pass move.
  • Added tests for Belch move.
  • Added tests for Bide move.
  • Added tests for Boomburst move.
  • Added tests for Brick Break move.
  • Added tests for Sky Drop move.
  • Added tests for Follow Me move.
  • Added tests for Weakness Policy held item.
  • Added tests for White Herb held item.
  • Added tests for Sitrus Berry held item.
  • Added tests for Shell Bell held item.
  • Added tests for Shed Shell held item.

  • Added Flutter Mane to Small End Islands
  • Added Capsakid to Arid and Mesas during the Day. Added chance to spawn with a group of Capsakid.
  • Added Scovillain to Arid and Mesas during the Day.
  • Added Flittle to Savannas and Arid during the Day. Added chance to spawn with a group of Flittle.
  • Added Espathra to Savannas and Arid during Day.
  • Added Taiga, Old Growth Pine Taiga, and Old Growth Spruce Taiga to all forest spawning biome types.

  • Updated PCs to only drop when mined with a Silk Touch pickaxe.
  • Added a new palette format to all palette-driven data. Datapacks prior to 9.2.6 will fail to load as a result of the new formatting and optimizations. To convert your datapack, please use our converter.
  • Added & implemented the "infinite" model locator officially retiring "DUAL_MODEL", "DUAL_MODEL_TEX" (etc) model factories.
  • Added scaling to model data so we can scale individual attachments on palettes (and also preparation for removal of PQC).
  • Added axis-based scaling for all dimensions along X, Y and Z (example, `"scale": [2.0, 1.0, 1.0]`).
  • Added support for attaching models to other models via bone anchor points. For an in-use example, see the 'Elf' and 'Christmas' palettes.
  • Added `christmas` and `elf` palettes with Christmas Hat attachment.
  • Added support for palettes to use the Minecraft particle system - palette particles can now utilize vanilla particles.

  • Updated Water as a viable block for Pokémon to spawn of for water spawns.
  • Updated boss drops to support Forge-style NBT entries.
  • Updated Shrine Orbs craft into themselves with max damage (or 0 KO charges).
  • Updated Shrine Orbs unrepairable so that they might not be combined into an anvil.
  • Optimized rendering by removing some redundant Matrix multiplication.
  • Updated Miraidon sprite.
  • Updated Walking Wake sprite.
  • Updated Lechonk model and animations.
  • Updated Swalot and Gulpin model and animations.
  • Updated Kilowattrel to now drop a Swift Feather instead of a Swift Wing.
  • Updated Gholdengo to drop a Relic Silver instead of two Relic Gold.
  • 20997 Updated Silicon to use the `ingot` tag.
  • 20997 Updated all metal ingots to use the `ingot` tag.
  • 20997 Updated aluminium and aluminium ore tags to Bauxite.
  • Removed the Pixelmon Anvil, as it is no longer required to craft Poké Balls.
  • Updated all instances of the Pixelmon Anvil to Minecraft's Anvil.
  • Updated all Pixelmon blocks to include a Minecraft map block color.
  • Updated lang to combine `pixelmon.interaction.abilitycapsule` and `pixelmon.interaction.abilitypatch` into `pixelmon.interaction.abilityitem`.
  • 5489 Updated Ability Patches to change Pokémon with their Hidden Ability to their first Ability.
  • 19808 Updated speed calculations to Generation 7+, which recalculates speed at every turn, reworking in turn Pursuit and switching mechanics.

  • Added `itemconfig.yml`.
  • Moved `multiplePhotosOfSamePokemon`, `allowAmuletCoin`, and `amuletCoinMultiplier` to `itemconfig.yml`.
  • Added `bottleCapLevel` to `itemconfig.yml`, which defaults to 50.
  • Updated `minimum-distance-between-spawns` config setting to 5 blocks, down from 15 blocks .
  • Updated `minimum-distance-from-centre` config setting to 5 blocks, down from 18 blocks.
  • Updated `maximum-distance-from-centre` config setting to 30 blocks, down from 64 blocks.
  • Updated spawn-replacements in and around villages to be lower leveled species.
  • Updated the village Golurk Iron Golem spawn replacement to be uncatchable.

  • Fixed the normal map breaking with attachments and only using the attachment texture.
  • Fixed the package not being correctly relocated causing load errors.
  • Fixed the direct connect screen being broken by the recent changes to the server list.
  • Fixed Pokemon continually trying to chase and fight the player after a battle.
  • 21209 Fixed a server crash from a fishing bobber entity or anything else interacting with a Pokémon Egg and attempting to cast it to a Player.
  • 21085 Fixed wishing pieces dropped from within inventory no longer cause the player's held item to be consumed.
  • Fixed Pokémon following or attacking the player while in spectator mode.
  • 21218 Fixed Pokémon being unable to complete biome conditions for evolving.
  • 21221 Fixed players being unable to use the Bee Spawn Egg to spawn Bee Pokémon.
  • Fixed statues not being able to be animated.
  • Fixed a crash caused by the starter list erroring when a player disconnects immediately after joining.
  • Fixed Pokemon with the `walksonwater` or `walksonlava` tag being unable to walk on that fluid.
  • 21252 Fixed medicines curing statuses outside of battle.
  • Fixed improper spacing in starter lang ribbons.
  • Fixed ability slots reverting on evolution when changed using the Pokémon Editor.
  • 21262 Fixed a crash caused by wearing a photo on a player's head.
  • Fixed `random shiny` sometimes failing to give a shiny with non-shiny palette listings.
  • 21282 Fixed missing texture sprites for all Pixelmon Music Discs.
  • Fixed Pawmo's hitbox and size.
  • Fixed Lechonk's walk failing to loop properly.
  • 19240 Fixed Swalot and Gulpin's animation deforming their models.
  • 21225 Fixed Chien-Pao missing from raid spawning.
  • Fixed Revavroom spawn level range.
  • Fixed Tandemaus and Maushold dropping the wrong type of cheese.
  • 21307 Fixed Delta Shards being obtainable in Mineshafts when they should not be there.
  • 21296 Fixed Kingambit failing to drop Silver Ingot.
  • Fixed Ultra Gingko Trapdoor tag failing to load.
  • Fixed curry recipe parsing errors for Boiled Egg, Brittle Bones, Smoke Poke and Toast recipes.
  • Fixed owned Minior not changing to Core form when out of battle.
  • Fixed water spawning not working properly as underwater typed when spawning Pokémon extremely deep underwater.
  • Fixed Pokémon not taking freezing damage when in contact with Powdered Snow blocks, except for Ice types.
  • Fixed Treasures of Ruin Pokémon stat jsons requiring hyphens.
  • Fixed registry entry utils like `/checkspawns` use backwards compatibility with un-hyphenated yet hyphenated Pokémon names.
  • 21278 Fixed data loss of Day Care Pokémon caused by concurrency issues happening on login.
  • 21325 Fixed gym signs deleting the item in the block instead of droping it.

  • Fixed Dancer not having the correct list of moves to copy from.
  • Fixed Focus Sash, Focus Band and Sturdy never blocking confusion damage.
  • Fixed Suction Cups ignoring Moldbreaker.
  • Fixed multiple Of Ruin abilities stacking stat reductions in battle.
  • 21280 Fixed the turn, weather and terrain information not appearing in the right side of the battle screen.
  • 15176 Fixed Dynamaxed Pokemon being able to switch out, switch back in, and use Max Moves and stay dynamaxed, despite not having the appearance.
  • 21239 Fixed transformed Pokémon from using the Disguise ability.
  • Fixed spectators getting stuck in permanent spectator mode after spectating into a raid.
  • Fixed Wandering Spirit triggering when dynamaxed.
  • Fixed Wind Rider blocking Tailwind from applying.
  • Fixed Wind Rider activating against Sandstorm.
  • Fixed an error caused by a non-existing trainer for changing weather conditions.
  • Fixed an error caused by changing forms when the entity itself does not exist.
  • Fixed Moldbreaker preventing Anger point from increasing the attack stat.
  • Fixed Seismic Toss, Night Shade and Parental Bond not being identified as a multi-hit move.
  • Fixed a server crash coming from attack animations.
  • Fixed flee moves such as Roar and Red Card sometimes randomly selecting a currently sent out Pokémon.
  • Fixed Comatose not correctly identifying the Pokémon asleep when they have 0 statuses.
  • Fixed Comatose not doubling the power of Hex or Wake-Up Slap.
  • Fixed berries erroneously applying healing after Neutralizing Gas leaves the field.
  • Fixed Neutralizing Gas not disabling extreme weathers caused by abilities such as Desolate Land.
  • Fixed Gastric Acid (and similar moves) not disabling Neutralizing Gas when used.
  • Fixed Imposter applying after Neutralizing Gas leaves the field.
  • Fixed Shields Down blocking all non-entry hazard statuses.
  • Fixed Slow Start not resetting count when Neutralizing Gas appears.
  • Fixed Emergency Exit not working properly after a multi-hit move.
  • Fixed Emergency Exit not properly working after damage at the end of turn, such as poison-inflicted damage.
  • Fixed horde battles crashing occasionally when starting battle due to a null battle controller in their AI.
  • Fixed occasional crashes in battle cased by LegacyRandomSource.
  • 21258 Fixed switch-in abilities triggering too early during simultaneous switches.
  • Fixed EnforcedSwitching triggering twice.
  • Fixed Blue Flare and Bolt Strike boosting Fusion Bolt and Fusion Flare.
  • Fixed Parting Shot soft-locking the client if used without a Pokémon to switch to.
  • Fixed Pursuit only triggering if already targeting the switching Pokémon.
  • Fixed Expanding Force failing to boost power on Psychic Terrain if not forcibly grounded.
  • Fixed Sky Drop damaging the wrong target after Ally Switch.
  • Fixed Sky Drop making contact on the first turn.
  • Fixed Sky Drop allowing targets to mega-evolve.
  • Fixed redirect abilities, such as Lightning Rod, not absorbing allied attacks.
  • Fixed redirect abilities, such as Lightning Rod, sometimes triggering before Follow Me.
  • Fixed redirect abilities and statuses, such as Lightning Rod, sometimes activating in the wrong order.
  • Fixed Wonder Guard blocking Sky Drop before its attacking turn.
  • Fixed Expanding Force and Thrash re-targeting by moving to their move effects.
  • Fixed Focus Sash, Focus Band, and Sturdy never blocking confusion damage.
  • Fixed Suction Cups ignoring Mold Breaker.
  • Fixed multiple Of Ruin abilities stacking stat reductions.
  • Fixed SapSipper absorbing self-targeting grass moves.
  • Fixed Aromatherapy and HealBell not healing allied trainers.
  • Fixed Aromatherapy bypassing Substitute and SapSipper.
  • Fixed HealBell bypassing Soundproof.
  • Fixed abilities logic firing before held item logic when statuses are added to Pokemon in battle.
  • Fixed addreneline orb incorrectly interacting with intimidate.
  • Fixed PickPocket working even after being swapped out off the battle field.
  • Fixed Prankster incorrectly blocking moves when moves are enforced by Encore.
  • Fixed Protosynthesis working with extreme weather.
  • Fixed weather changes not calling the change to any held items.
  • Fixed booster energy activating before the initial switch in at the start of a battle.
  • Fixed Z-Nature Power not dealing any damage.
  • Fixed stack overflow crash caused by Opportunist.
  • Fixed ShieldDust not blocking all additional effects against the target.
  • Fixed SheerForce not triggering for many additional effects.
  • Fixed PoisonTouch not being considered an additional effect (to be blocked by ShieldDust).
  • Fixed Frostbite chance ignoring SereneGrace and WaterPledge boosts in Hail.
  • Fixed ThawTarget moves (ie Scald) thawing frozen targets if SheerForce is active.
  • Fixed SparklingAria not curing burns against ShieldDust.
  • Fixed Barb Barage being marked as a non-contact move.
  • Fixed Bide being marked as a non-contact move.
  • Fixed Bolt Strike being marked as a non-contact move.
  • Fixed Bone Club being marked as a non-contact move.
  • Fixed Comeuppance being marked as a non-contact move.
  • Fixed Double Shock being marked as a non-contact move.
  • Fixed False Surrender being marked as a non-contact move.
  • Fixed Final Gambit being marked as a non-contact move.
  • Fixed Gear Grind being marked as a non-contact move.
  • Fixed Hold Back being marked as a non-contact move.
  • Fixed Mortal Spin being marked as a non-contact move.
  • Fixed Nuzzle being marked as a non-contact move.
  • Fixed Plasma Fists being marked as a non-contact move.
  • Fixed Raging Fury being marked as a non-contact move.
  • Fixed Strength Sap being marked as a non-contact move.
  • Fixed Terrain Pulse being marked as a non-contact move.
  • Fixed Thunder Cage being marked as a non-contact move.
  • Fixed Triple Kick being marked as a non-contact move.

  • Updated Italian translation.
  • Updated Ukrainian translation.
  • Updated Traditional Chinese translation.

  • Added `Ability#modifyConfusionDamage` and `HeldItem#modifyConfusionDamage`.
  • Moved variables and control of dynamaxing the model of a Pokemon from the `PixelmonWrapper` class to the `PixelmonEntity` class.
  • Added `PixelmonWrapper#attackAlly(I)V` for simplifying the selection of attacking moves.
  • Added `BattleTestHelper#setupDoubleBattleBuilder` to allow double battles.
  • Changed `BattleController#takeFullTurn` to do a turn for each active pokemon instead of always 2.
  • Added check to getGrowth to prevent scaling on null values.
  • Fixed `PokemonBuilder#ability` not creating a new instance of the ability given.
  • You no longer need to manually register battle tests with the "UnitTestRegistry" class and instead should use the `BattleTestClass` annotation.
  • The `PixelmonUnitTest` class has been deleted as it is no longer needed.
  • The `UnitTestRegistry` class has been renamed to `BattleTestRegistry`.
  • The `UnitTest` annotation has been renamed to `BattleTest`.
  • Removed the test identifier from the `BattleTest` annotation and changed it to instead just use the method name.
  • Added the `BattleTestHelper` with useful functions for creating No-Op wild battle participants, quickly starting frozen battles, and skipping through frozen battle's ticks.
  • Changed all battle test functions to have the BattleTestHepler parameter.
  • Added & exposed `BattleController#doTurnLogic` and `BattleController#takeFullTurn` for manipulating frozen battles with a bit more ease.
  • Added `PokemonBuilder#ability(Lcom/pixelmonmod/api/registry/RegistryValue;)Lcom/pixelmonmod/pixelmon/api/pokemon/PokemonBuilder` overload.
  • Added `PokemonBuilder#moves([Lcom/pixelmonmod/api/registry/RegistryValue;)Lcom/pixelmonmod/pixelmon/api/pokemon/PokemonBuilder` overload.
  • Added `PokemonBuilder#species(Lcom/pixelmonmod/api/registry/RegistryValue;)Lcom/pixelmonmod/pixelmon/api/pokemon/PokemonBuilder` overload.
  • Added `BattleTestHelper#createDefaultPokemon` for creating a Pokemon with the default settings (level 100, serious nature, max IVs, max happiness, in a PokéBall).
  • Added `PixelmonWrapper#attackOpponent(I)V` for simplifying the selection of attacking moves.
  • Added `PixelmonWrapper#attackSelf(I)V` for simplifying the selection of attacking moves.
  • Adds the `PartyFaintRespawnEvent` for canceling the above mechanic in given situations.
  • Made EVYields class immutable.
  • Made EVYields class a record.
  • Added `EVYields#setHP`, `EVYields#setAttack`, `EVYields#setDefense`, `EVYields#setSpecialAttack`, `EVYields#setSpecialDefense`, `EVYields#setSpeed`, `EVYields#addToHP`, `EVYields#addToAttack`, `EVYields#addToDefense`, `EVYields#addToSpecialAttack`, `EVYields#addToSpecialDefense`, `EVYields#addToSpeed`, `EVYields#set`, and `EVYields#multiply`.
  • Added `EVGainEvent` and `EVGainEvent.Double` for handling when EVs are gained.
  • Renamed `BattleController#turn` to `actionIndex` to better separate it from `battleTurn`.
  • Added `EffectBase#modifyTargets`.
  • Added `StatusBase#stopsEvolution`.
  • Added `PixelmonWrapper#canEvolve`.
  • Added `Ability#preventsRedirection`.
  • Added `Ability#modifyConfusionDamage` and `HeldItem#modifyConfusionDamage`.
  • Fixed `PixelmonSpecies#TAPU_FINI` being a MissingNo.