- 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.1.0 and is required for a Pixelmon client to run.
- 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.
Additions:
- Added the Gimmighoul Coin.
- Added new recipe types: pixelmon:crafting_shaped_tag, pixelmon:shapeless_tag and pixelmon:crafting_poke_ball.
- Added Slippery Ice Block.
- Added Slippery Ice Block recipe.
Rework:
- Completely reworked all tabs in the Pokémon Editor screen.
- Using the Pokémon Editor opens up the Pokémon Team tab.
- Added a new PokéPaste tab to the Pokémon Editor screen:
- Allows editing a multi-line editor displaying all the Pokémon's values in the https://pokepast.es/ format.
- Added several new buttons.
- Should be identical to the previous Import/Export tab next to the Pokémon Team tab, but will only affect the Pokémon currently being edited.
- NEW: Hovering the cursor over the PokéPaste url edit box will render a tooltip giving a description of what that edit box is for.
- Allows editing a multi-line editor displaying all the Pokémon's values in the https://pokepast.es/ format.
Pokémon:
- Added Maschiff.
- Added Mabosstiff.
- Added Brute Bonnet.
- Added Iron Jugulis.
- Added Iron Treads.
- Added Iron Hands.
- Added Iron Valiant.
- Added Farigiraf.
Moves, Battle Items and Abilities:
- Added new move, item and ability tests.
Spawning:
- Wild Pokémon encounters after cooking curry now function as in the mainline games:
- Several new spawning conditions have been added so that different flavors can have distinct spawns.
- Most Pokémon species can now be found via curry in their normal spawn biomes, though rarities have been adjusted from standard spawning values.
- Costumed Pikachu now have a proper method of obtainment, with each form associated with a different curry flavor: Rockstar (Spicy Curry), Belle (Dry Curry), Popstar (Sweet Curry), Ph D. (Bitter Curry), and Libre (Sour Curry).
- Several new spawning conditions have been added so that different flavors can have distinct spawns.
- Several new config options related to curry spawning have been added.
Datapack:
- Added PreventRedirection move effect to allow datapack moves to ignore redirection effects.
- Added additional checks to prevent datapacks overlapping between servers and worlds.
- Added CheckedStrikes effect to replace PopulationBomb, TripleAxel, and TripleKick.
- Added individual move flags, "AdjacentAll", "OtherSide", "YourSide", "BothSides", "All" and "1 Random".
- Updated Magic Coat and Magic Bounce to use datapackable move flags "reflectable".
- Updated moving riding offsets so they can now be used for land-based movement.
- Added the `pixelmon:open_trade` interaction result, which interaction opens the trade UI with the two specs specified.
- Added the `pixelmon:relearn_move` interaction result.
- Added a confirmation button to the party select screen when the desired amount of pokemon are selected.
- Added a right-click interaction to the party select screen to allow the user to open the poke checker screen when deciding which Pokemon to select.
- Removed the old trade list configuration as it's now in the interaction result config.
- Added the `GimmighoulCoinCondition` Evolution Condition.
Changes:
- Modifier PokéGifts to provide a copy of the Pokémon, preventing linking issues.
- Added Dynamax Level, Hyper Training, Egg Steps, Temp Ability, extra Stats, bonus Stats, persistent Data and Ribbons to PokemonBuilder.
- Temporary forms no longer linger on NPCs if the battle is aborted mid-evolution.
- Removed the Picket Fence.
- Updated Raid Dens to give conduit effects, allowing water-breathing.
- Added a party selector to NPC Presets.
- Updaed NPCs where left-clicking an NPC now allows you to edit the party of said NPC.
- Updated the order of presets on the NPC preset screen to be ordered alphabetically.
- Updated the searching of NPC presets to use contain checks rather than startsWith.
- Improved async loading and saving so concurrency issues don't cause data overwriting.
- Updated the opening **NPC Creator Presets*
- screen of the NPC Editor fit larger preset file names and be centered to the screen even at full screen window sizes.
- Updated the `pixelmon:right_click` event the default (instead of left-click) for the event of an NPC's Interaction.
- Updated the `pixelmon:true` condition the default condition for the condition of an NPC's Interaction.
- Changed the chat message that notifies a player that their NPC preset was saved to be formatted identical to the screenshot chat message.
- Fixed it so that the result of an NPC's Interaction will not execute when the Pokémon Editor is held in the hand the player used to interact with the NPC.
- The title data and author data of the PokéPaste that is automatically made for an NPC Preset were switched and that has been fixed.
- Fixed the missing empty line between different Pokemon when creating the PokéPaste.
- Updated Illuminate ability to Generation 9 effect.
Keybinds:
- Added a new Pixelmon section for keybinds, splitting all mod keybinds into Pixelmon, Pixelmon Battles, and Pixelmon PC.
- Added a visual indicator as to whether the player's cursor is hovering over an item in the keybind menu.
- Added several keybinds to make it possible to navigate a battle screen without requiring a mouse:
Config:
- In the Graphics Config there is now a pokemonEditorExtraColorModeEnabled value which is by default set to true. Turning this off will remove the extra colors added to some of the widgets. Alternatively, you can press F1 to disable it temporarily.
- What Extra Color Mode affects:
- The text of the Current HP slider changes between green, yellow, and red, depending on the Pokémon's current HP relative to it's max HP.
- The Dynamax slider follows the same color scheme as seen in a Pokémon's Summary page. The text is white at a Dynamax level of 0, and changes between cyan at a Dynamax level of 1 up to hot pink at a Dynamax level of 10.
- The text for all of the Pokémon's moves are change to the same color as the type they are (i.e. Fire Blast becomes orange, Water Pulse becomes blue, etc.)
- The text in the Multi-Line Edit Box on the Import/Export tabs will become colored, similar to on the https://pokepast.es/ website.
- The stats that the Pokémon's nature affects are colored blue for the increased stat and red for the decreased stat.
- The text of the species of the Pokémon is set to the color of the Pokémon's primary type.
- The text of the Current HP slider changes between green, yellow, and red, depending on the Pokémon's current HP relative to it's max HP.
Fixes:
- Fixed spawning threads locking up sometimes (randomly) from getChunk calls being made from a non-server thread.
- Fixed checkspawns block requirement for Headbutt from "anything but wool Recipe Book " to "logs".
- Fixed the screen changing too quickly, causing NPE in the findConnection methods.
- 21556 Fixed PokéGifts' contents and settings not persisting across launches.
- 17132 Fixed persistent data compound tag being lost whenever the Pokémon Editor is used.
- Fixed the NPC Trainer spawns failing for high-level Trainers.
- Fixed the Recipe Book button rendering outside the inventory menu if the player opened the Recipe Book, clicked the Day Care tab, and then clicked the Survival inventory tab.
- Fixed an issue where exported battle rules text is missing line breaks.
- 21659 21761 Fixed invalid import method. Before the fix, the import function would fail if the number of Pokémon was greater than 1.
- Fixed Max Raid Dens not spawning Raids for the lowest star level possible in each biome.
- Fixed an error where every biome used the default weights of each star level, even if that biome did not have a Raid possible for a certain star level.
- 20580 20666 20666 Fixed colored nicknames not saving/loading properly on Pokémon.
- Fixed a rendering crash happening randomly.
- 18700 Fixed legendary requirement not overriding the ability and ability slot, resulting erroneous abilities.
- 21128 Fixed Zorua, Zoroark, and any transformed Pokémon making the sound of its own species instead of the sounds of the Pokémon it's transformed into.
- 19804 Fixed the EXP, Mark, and Catching Charms disappearing upon death.
- 19814 Fixed Lures that were placed in the lure slot mistakenly rendering in the middle of the inventory if a player opened their inventory with the Recipe Book already active and then closed the Recipe Book.
- 20226 Fixed soft-locking caused by dying while a raid count down.
- Fixed the ribbon spec not working with the spectest command by changing the RibbonRequirement to only check the ribbon's type.
- 18095 Fixed all of Pixelmon's keybinds failing to work if bound to mouse keys.
- Fixed the screen of the Pixelmon Spawner being rendered with the default darkened background.
- Fixed the Quirky Mint being missed from the creative menu.
- Fixed an error caused by FlyingParameters not existing.
- Fixed shaders not applying to emissive parts of Pokémon.
- 21194 Fixed all Poké Ball recipes yileding the same Poké Ball type.
- 21194 Fixed all Poké Ball Lid recipes yileding the same Poké Ball Lid type.
- 21719 Fixed spawning errors caused by sky heightmap, halting spawning altogether.
- Fixed rare server crash caused by an error in AirSaver if the player does not exist.
- Fixed imported Pokémon with Hidden Power requiring Bottle Caps.
- Fixed exported Pokémon not including hypertrained stats.
- Fixed invalid imported Hidden Power types not throwing the right error.
- Fixed Gastly particles spawning ontop of the orb.
- 21941 Fixed ability changing on evolution for naturall
- 21951 Coloured Sash and Rainbow Sash colours are now vibrant again.
- 21951 Rainbow Sash now uses a REALLY rainbow colour set.
- 21951 Coloured Sash no longer uses a triadic of the colour chosen instead of the colour chosen.
- Fixed Relearner move lists not storing TM and Egg moves.
- Fixed console error in `/resetpokestats`.
- Fixed an error in Day Care requirements causing client disconnects.
- Fixed the 'fire on redstone' option for the Pixelmon Spqawner still spawning Pokémon even without a redstone signal.
- Fixed the list of TMs that a Pokémon can learn being displayed incorrectly on their summary screen.
- Fixed a rare crash caused by rendering too large groups of high detail entities.
- 22003 Fixed the PC Search visually duplicating Pokémon when the full species name of a Pokémon is typed.
- 19570 Fixed all instances of the word 'gingko' mispelled as 'ginkgo'.
- Fixed a rare error in Pokemon Builder.
- Fixed catching a Pokémon in a Hisui Ball not properly changing its movelist on catch.
- Fixed the move learning screens of the Move Tutor, Transfer Tutor, and the Move Relearner having Minecraft's darkened background applied to them.
- Fixed input text boxes for NPC interactions cutting off text early.
- Fixed an instance of the game crashing upon trying to add a ribbon to a Pokémon when the Ribbon's MutableRibbonData was null.
- Fixed a client disconnect occurring when the UpdateSinglePokemonPacket tried to fill the -1 slot of a Pokémon team with a Pokémon.
- Fixed ArrayIndexOutOfBoundsExceptions occurring in the UpdatedEditedPokemonPacket.
- Fixed the ColouredTextFieldWidget and the EnhancedTextFieldWidget rendering at a pixel too big on their left and right side.
- Fixed the ScrollableListWidget sending an incorrect value for the y coordinate of the mouse.
- Fixed the yellow-colored highlight for a Pokémon's displayed ribbon not scaling with the size of the ribbon's sprite.
- Fixed the client crashing upon trying to render a Ribbon Button when the resource of the MutableRibbonData was set to null.
- Fixed the client crashing upon being sent the CloseEditedPlayerPacket.
- Fixed the PokemonBuilder setting the new Pokémon's nature to the copied Pokémon's mint nature.
- Fixed the Export Text from the Showdown Converter displaying the name of the Pokémon's nature as Capitalized instead of in ALL CAPS.
- 21960 Fixed a visual issue with newly crafted Bird Orbs appearing full.
- 21163 Fixed a visual issue with crafted orbs rendering other sprites beneath them.
- Fixed the durability bar of Bird Orbs appearing underneath them.
- 21984 Fixed visual duplications caused by attempting to swap Pokémon around in your party from your inventory screen.
- 21944 Fixed missing idle animations in the Pokédex display screen.
- Fixed the storage cache invalidating the cached storage of online players causing parties to be loaded and then Pokémon that are sent out being temporarily irretrievable.
- 21090 Fixed Spectrier's emissive texture.
- Fixed Ice Rider and Shadow Rider shiny textures.
TCG:
- Fixed text not rendering in the text box when hovering the cursor over an action on the TCG Action Log.
- Fixed text not rendering in the text box when hovering the cursor over an attack of a TCG Card being inspected during a TCG Battle.
- Fixed the positioning and missing background of the TCG Battle Guide, which displays at the start of a TCG Battle to let players know how to start.
- Fixed F3 not toggling debug mode for Dev Environments in the TCG Screen.
- Fixed the hitboxes of cards during a TCG Battle shifting based on the player's FOV, they will now always be in the same place.
- Fixed the damage number not appearing when a player inspects a card during a TCG Battle.
- Fixed selecting a Prize Card during a TCG Battle disconnecting the player.
- Fixed the Price Cards always having a red-colored hitbox rendered behind them.
- Fixed the representation of the hitbox of Prize Cards rendering for non-developer clients.
- Fixed the positioning of inspected Pokémon Cards so that the selection of the buttons for abilities, attacks, and retreating lines up with the text on the card.
- Fixed the z-level rendering of the outline of the ability, attack, and retreat buttons so that it appears in front of inspected cards.
- Fixed the z-level rendering of warning text when abilities, attacks, or retreating can't be used so that it appears in front of the inspected cards.
- Fixed disconnect on end of game from render system calls on network thread.
- Fixed TCG registries loading before Pixelmon ones, causing them to be cleared before the sync can happen.
- Fixed TCG win broadcast being on the action bar.
- Fixed players being unable to chat during TCG battles.
- Fixed the grey filter covering the whole screen while in a TCG Battle.
Battles:
- Fixed Rollout getting stuck at 60 power if used Defense Curl instead of continuing to double.
- 21259 Fixed Population Bomb not taking accuracy changes into account.
- Fixed Multi-hit moves continuing to attack after being put to sleep mid-move.
- Fixed Dragon Darts not hitting itself and a targeted AllySwitched ally once each.
- Fixed Dragon Darts not hitting itself twice if a targeted AllySwitched ally is immune.
- Fixed Dragon Darts printing multiple failure messages when missing both targets.
- Fixed Substitute not being removed by dynamaxing.
- Fixed Substitute not removing binding effects.
- Fixed Substitute not blocking entry hazard effects.
- Fixed Substitute blocking effects from moves that bypass Substitute.
- Fixed Substitute blocking Intimidate/Imposter after being broken by a switch move.
- Fixed False Swipe reducing damage when hitting a Substitute of a low-health Pokémon.
- Fixed Trick and Fling failing when the user is behind a Substitute.
- Fixed Incinerate not destroying Type Gems.
- Fixed Reflect/Light Screen stacking damage reduction with Aurora Veil.
- Fixed Reflect/Light Screen reducing damage by half in non-singles fights.
- Fixed Poison Pokémon with Steel secondary typing not removing Toxic Spikes.
- Fixed Poison Pokémon with Heavy Duty Boots not removing Toxic Spikes.
- Fixed EntryHazard removal not removing Gmax Steel Surge's Sharp Steel.
- Fixed Prankster not blocking spread status moves, such as Growl, against Dark Pokémon.
- Fixed Prankster not blocking moves called via boosted moves against Dark Pokémon.
- Fixed Pursuit doing 4x damage to switching target.
- Fixed Pursuit being redirectable when targeting a switching target.
- Fixed Max Darkness and Black Hole Eclipse based on Pursuit interrupting switches.
- Fixed virtual battles causing errors and crashing mid-battle when Trainers send out Pokémon.
- Fixed errors in Synchronize causing battle crashes in virtual battles.
- Fixed hard switch timing to be based on the previous Pokémon's speed.
- Fixed Substitute blocking Static or Flame Body when the opponent uses a non-status move.
- Fixed Defog not removing terrains.
- Fixed Defog clearing hazards when target is semi-invulnerable but has a Substitute.
- Fixed G-Max Wind Rage not triggering Defog after breaking through Protect and hitting a Substitute.
- Fixed G-Max Wind Rage removing toxic spikes after triggering Toxic Debris.
- Fixed all terrains affecting Pokémon in Sky Drop's semi-invulnerable turn.
- Fixed Grassy Terrain reducing Earthquake power for all targets, not just those affected by the terrain.
- Fixed Grassy Terrain healing Pokémon during semi-invulnerable turn of attacks.
- Fixed Misty Terrain reducing dragon attacks based on the user being affected by terrain instead of the target.
- Fixed Misty Terrain boosting Misty Explosion when the user is not grounded.
- Fixed Misty Terrain protecting Pokémon from Yawn and Confusion.
- Fixed Red Cards activating from the holder taking indirect damage.
- Fixed Teatime resetting the value for the item a Pokémon had consumed.
- Fixed an issue where Bug Bite and Pluck were setting the original holder of the berry that was eaten as the consumer instead of the Bug Bite or Pluck user.
- Fixed Take Heart curing the non-volatile status conditions of allies.
- Fixed Outrage not confusing the user when the final turn is disrupted.
- Fixed force-eaten LeppaBerry refilling their current attack's pp instead of their first attack missing pp.
- Fixed the Metronome item keeping track of the original move a Pokémon used, if that move called another move to use (e.g. Copycat).
- Fixed the Metronome item directly modifying the damage done by a move, instead of the power of that move.
- Fixed the Pickpocket ability not stealing Protective Pads off an attacking Pokémon that makes contact.
- Fixed the Punching Glove permanently making punching moves not make contact, even if the Punching Glove was stolen from the Pokémon.
- Fixed the Eject Pack switching out the holder if the holder was attacked with Parting Shot.
- Fixed an issue where if multiple Eject Packs activated, every Pokémon that could switch out would, instead of only the fastest Pokémon switching out.
- Fixed an issue where Pokémon holding an Eject Pack were immediately switched out if an end-of-turn effect lowered their stats, instead of waiting for all end-of-turn effects to finish.
- Fixed an issue where it was possible for a Pokémon to fail to switch targets from a Pokémon that had switched out (due to its Eject Pack activating) to the Pokémon that had switched in.
- Fixed an issue where if two Pokémon were both holding items and both had their stats lowered. If one of the Pokémon was holding a White Herb, it was possible for the other Pokémon to have their item removed.
- Fixed Knock Off failing to remove Mail from a Pokémon.
- Fixed Revenant not blocking Destiny Bond from being applied in its presence.
- Fixed Revenant not applying extra Pressure.
- Fixed a severe exploit with Revival Blessing
- Fixed a bug where Flying-type Pokémon holding an Iron Ball (and not under the affects of Gravity)
- would not receive 1x damage from Ground-type attacks when their secondary typing was weak or resistant to ground types.
- Fixed the Kee Berry and the Maranga Berry not reducing the damage from the hits after the first hit of multi-hit moves.
- Fixed Ripen affecting the Lansat Berry.
- Fixed Rock Head not blocking Chloroblast's recoil.
- Fixed Clear Smog's stat reset bypassing Substitute.
- Fixed Air Balloon popping from non-direct damage.
- Fixed Focus Sash protecting against Future Sight and Doom Desire.
- Fixed Knock Off being unable to remove items it cannot be given.
- Fixed Mega Evolution abilities not triggering on switching in.
- Fixed Mega-evolved Bosses not having their ability.
- Fixed Z-Parting Shot healing the user.
- Fixed Z-Parding Shot not healing the switched Pokémon after a failed Parting Shot.
- Fixed Parting Shot not failing against Hyper Cutter and -6 Special Attack.
- Fixed Mirror Armor only reflecting stat drops from Status moves.
- Fixed Prankster-boosted moves failing against allied Dark-type Pokémon.
- Fixed Prankster not boosting ExtremeEvoBoost.
- 21773 Fixed abilities activated on entry still triggering when fainted by entry hazards.
- Fixed switch moves causing a waiting bug when the user faints.
- Fixed damaging effects occuring before Drain.
- 21750 Fixed Scale Shot triggering off non-attack damage.
- Fixed Weakness Policy triggering off weather if using an attack super-effective against the user.
- Fixed Weakness Policy triggering if already at max stages.
- Fixed Weakness Policy not triggering another Pokémon's switch.
- 21803 21917 Fixed Life Orb triggering on non-successful attacks.
- Fixed an issue that Salt Cure would show trigger messages if it is used towards Substitute.
- 21918 Fixed crash when hard-switching a Levitate Pokémon onto spikes.
- Fixed Intimidate activating an Adrenaline Orb if the item holder had a Substitute out.
- Fixed Adrenaline Orb activating if the item holder's Attack was already minimized.
- Fixed Adrenaline Orb being passed through Symbiosis before being consumed by Intimidate.
- Fixed Intimidate reducing attack of non-adjacent opponent.
- Fixed accuracy of modifying ability Hustle from -20 to *0.8.
- Fixed Pokémon transformed into mega-forms eing able to use Z-moves.
- Fixed Dynamax being usable once per participant instead of per team.
- Fixed NPC trainers using Dynamax in Max Raids.
- Fixed raid Pokémon not having perfect IVs based on star level.
- Fixed raid Pokémon always being level 50.
- Fixed a caught raid Pokémon's moveset not matching the raid boss' moveset.
- Fixed cheer effects in raids.
- Fixed Pokémon not reviving againt Max Raid bosses.
- Fixed a battle crash rarely caused by EntryHazard.
- Fixed a battle crash occuring when a Pokémon in a virtual battle has Illusion.
- Fixed an error caused by the Legend Plate.
- Fixed a battle crash from the battle controller being null at the end of a raid battle.
- Fixed an error in clear status.
- Fixed the names of players and NPCs not appearing by resetting the z-level to 0.
- 21912 Fixed client switch menu hiding Pokémon that were forced out on the same turn they were switched in.
- 21999 Fixed Ash-Greninja, in its Battle Bond form, not transforming in Horde or Raid battles.
- Fixed max HP value not being recalculated after temp-level is set, fixing the issue where battle rules changing a Pokémon's level did not cause the HP to update.
- Fixed spread move damage order to hit allies before enemies.
- Fixed Critical Hit effect calculation.
- Fixed non-forced criticalHit count for Galar Farfetch'd evolution.
- Fixed Anticipation triggering against Status moves.
- Fixed Anticipation not triggering against Hidden Power.
- Fixed Baton Pass copying Gmax Chi-Strike boosts.
- Fixed Burn Up not thawing user when it has a fire type.
- Fixed Color Change changing type if Pokémon already had that type.
- Fixed Corrosion ignoring Poison/Steel resistance for GmaxMalodor’s damage.
- Fixes Costar not copying crit boosts if no stat stages boosted.
- Fixed Dire Hit’s effect being stackable.
- Fixed Gravity not disabling flight moves.
- Fixed Gravity not boosting move accuracy.
- Fixed Judgment changing type based on user’s type instead of plate type.
- Fixed Judgment with Legend plate finding type least resisting the target’s types.
- Fixed Laser Focus persisting turns if an item is used.
- Fixed Mimicry losing added types when activating.
- Fixed Moldbreaker not ignoring Unaware’s ignored accuracy changes.
- Fixed Purifying Salt removing statuses gained before ability.
- 21949 Fixed Ring Target not working when there is a global status on the field.
- Fixed Receiver not immediately triggering abilities from fainting allies.
- Fixed Roost not suppressing Flying type gained after the move.
- Fixed Roost restoring lost types.
- Fixed Transform not copying Flying type of Roosting Pokémon.
- Fixed Transform not copying Rage Fist hit count.
- Fixed Transform not copying opponent weight.
- Fixed Transform copying Gmax forms.
- Fixed Transform allowing PP restoring items to boost moves above 5PP.
- Fixed an issue where Bug Bite or Pluck were seting the original holder of the berry that was eaten as the consumer instead of the Bug Bite or Pluck user.
- Fixed Teatime resetting the value for the item a Pokémon had consumed.
Developer:
- BREAKING CHANGE: removed Population Bomb move effect.
- BREAKING CHANGE: Triple Kick move effect.
- BREAKING CHANGE: Triple Axel move effect.
- In a developer environment, toggling the hitbox visual can now be used without needing a 2nd TCG player.
- Removed the deprecated methods for `getNickname` and `getDisplayName` that return a String.
- Updated `getFormattedNickname`, and `getFormattedDisplayName` to `getNickname` and `getDisplayName`.
- Updated all rendering to use components not Strings.
- Added the `GimmighoulCoinRequirement` for PokeSpecs.
- Added the `GimmighoulStats` to keep track of how many Gimmighoul Coins a Gimmighoul has amassed.
- Adds the `InteractionGimmighoulCoins` which is what allows a Pokemon using the `GimmighoulCoinCondition` to evolve to be given Gimmighoul Coins.
- Added a fullbright option to ShaderParameters.
- Added terrastralization shader.
- Added a `party` value to the NPC Builder.
- Added a `party` balue to the NPCPreset.Builder.
- Added a `uuid` option to the NPC Builder.
- Added null checks in the NPC Builder methods to result in friendlier errors for developers.
- Added the TeamSupplier interface and registry.
- This is necessary because the Mojang registries load before our old-style Pixelmon ones therefore, when the Presets were attempting to load teams for the NPCs they were unable to parse them and validate them as the species data did not yet exist.
- There are three types of TeamSupplier by default, `pixelmon:empty`
- an empty team provided, `pixelmon:poke_paste`
- takes a PokePaste URL and converts it into a team and `pixelmon:spec`
- takes a list of specs and converts them into a team.
- This is necessary because the Mojang registries load before our old-style Pixelmon ones therefore, when the Presets were attempting to load teams for the NPCs they were unable to parse them and validate them as the species data did not yet exist.
- Added `EntityBattleParticipant` with a builder.
- This means any entity (vanilla mobs included) can now be used to represent a trainer in battle
- The builder allows you to modify how the participant will operate (ai mode, boss tier, etc).
- This means any entity (vanilla mobs included) can now be used to represent a trainer in battle
- Added the `BattleViewer` interface for entities/players that are watching a battle.
- The spectator class now inherits the BattleViewer interface.
- Added `BattleController#broadcastPacket` which sends a packet to all BattleViwers.
- Added `BattleController#getBattleType`.
- Added `BattleController#getSpectators`.
- Added `BattleController#broadcastPacket`.
- Added `BattleController#canSpawnEntity`.
- Added `BattleController#postSpawnEntity`.
- The spectator class now inherits the BattleViewer interface.
- Changed the `spectator` field in the SpectateEvent (and sub-classes) to be private.
- You can now access the player spectating a battle via `SpectateEvent#getSpectator`.
- The `target` field in SpectateEvent.StartSpectate is now private.
- You can access, and modify, the spectator's target using `SpectateEvent.StartSpectate#getTarget` and `SpectateEvent.StartSpectate#setTarget`.
- You can now access the player spectating a battle via `SpectateEvent#getSpectator`.
- Removed `ParticipantType` enum.
- Replaced with the following methods:
- `BattleParticipant#isWild`
- `BattleParticipant#isPlayer`
- `BattleParticipant#isTrainer`
- `BattleParticipant#isRaid`
- `BattleParticipant#isWild`
- Simplified a lot of logic in the BattleParticipant classes.
- All battle participants now have an entity through the BattleParticipant class
- `BattleParticipant#entity` (protected variable).
- The wait boolean has been made protected, and should be accessed via `BattleParticipant#waiting` and `BattleParticipant#setWait`.
- Added a method to reduce duplicated code for clearing the movement properties of the BattleParticipant's entity.
- `BattleParticipant#clearMovement`
- Moved the `hasMovePokemonReserve` method implementation from the sub-classes to the BattleParticipant class (reducing code, and fixing some bugs where it was different in different implementations).
- Added `BattleParticipant#isOnField` for checking if a PixelmonWrapper is on the battle field
- Changed the method `startBattle` to `preBattleChecks` as this was causing some issues with trainer participants.
- `startBattle` is now only overridden in the PlayerParticipant for sending the battle to the client to start it.
- Added `BattleParticipant#releasePokemon` to spawn the pokemon for a PixelmonWrapper.
- This should be how all Pokemon are spawned in battle as this has the checks for if the entity can spawn.
- Moved the `switchPokemon` logic from the sub classes into BattleParticipant, again fixing some bugs and reducing duplicate code.
- Changed `BattleParticipant#sendMessage` to `BattleParticipant#sendPacket` to make it clearer what that method is doing.
- All battle participants now have an entity through the BattleParticipant class
- The AirSaver class has been changed to a single static registry and is no longer something you have to implement yourself where you want to use it.
- To add an air saver to a player you now use `AirSaver#lock`.
- To remove an air saver from a palyer you use `AirSaver#unlock`.
- To add an air saver to a player you now use `AirSaver#lock`.
- You can now start battles with players via the PlayerPartyStorage.
- The following methods were added:
- `PlayerPartyStorage#battle(ServerPlayer)`
- `PlayerPartyStorage#battle(ServerPlayer, BattleType)`
- `PlayerPartyStorage#battle(ServerPlayer, BattleRules)`
- `PlayerPartyStorage#battle(ServerPlayer)`
- All of the above will start a battle between the owner of the storage and the player specified.
- The following methods were added:
- Added the `BooleanBattleProperty` class for easily creating simple battle boolean based battle properties.
- Added the `spawn_entities` battle property.
- This accepts true or false, and when set to false will prevent entities spawning for that battle.
- The default is true.
- This accepts true or false, and when set to false will prevent entities spawning for that battle.
- Simplified the battle starting & spectating packets to be a single packet each.
- Added `BattleController#spectate`.
- Added `BattleController#removeSpectator`.
- Fixed Pokédex method updating the value in the wrong Pokédex.
- Added a `PartyStorage#getAll` that takes a Predicate.
- Added checks to PartySelectionScreen API to make constructing it easier.
- Added `RelearnerFactory#builder` for creating a relearner interaction.
- Added `TutorFactory#builder` for creating a Move Tutor (or Transfer Tutor) interaction.
- Adds `ShopFactory` and `ShopBuilder` API.
- Refactored the `ShopkeeperEvent` to `ShopEvent` and now fires with the vending machine.
- `ShopEvent` now has both `getBlockPos` and `getEntity` referring to either the block position of the vending machine, or the entity (most commonly NPC), the shop was opened from.
- Added Precondition checks to the Dialogue Builder API to make for friendlier errors when forgetting specific calls.
- Added `EmptyInteractionEvent` for creating interaction events that don't need to subscribe to any events but instead need to be called externally.
- Changed the constant `EntityProperties#DEFAULT` to a function `EntityProperties#defaultProperties()` and added a child version `EntityProperties#defaultChildProperties()`.
- Added `NPCPreset.Builder#noParty`.
- Added overloads for `TextureProvider#resource` to make it less verbose to use.
- Renamed getEffectiveTypes to modifyEffectiveTypes.
- Added `Ability.ignoreStatusTypeImmunity`.
- Added Ability flags to support various effects.
- Added move flag ‘gravity’ for moves disabled by the Gravity global status.
- Added `Pokemon#setToOppositeGender`.
- Added `DropDownWidget#setMaxVisibleOptions`.
- Added `Pokerus#setCured` and `Pokerus#setInfected`.
- Added `Pokerus#getNameOfStrainWithInfected` that returns a component with the infected/cured status plus the strain of the Pokérus.
- Pressing the F3 key with the Pokémon Editor open while in a Dev environment will render a cyan background where the GridLayout can place the widgets added to it along with a pink background to display the space taken up by the widget.
- `UpdatePlayerPokemonPacket` now gets the Pokémon's slot via its UUID, instead of via the Pokémon object.
- RibbonButtons will now use the widget's alpha, instead of always being fully visible.
- Added `IVStore#isEveryStatHyperTrained`.
- Added static functions `ResourceLocationHelper#getItemStackTextureLocation` and `ResourceLocationHelper#getItemTextureLocation`.
- Added `Attack#getPP` and `Attack#setPP`.
- Added `Attack#getPPLevel` and `Attack#setPPLevel`.
- Created the `SliderWidget`, which extends ForgeSlider.
- Added `ExtraStats#getValue` and `ExtraStats#setValue`.
- Added `ExtraStats#getValueName`, which returns a component with a better name for the value of the Extra Stat.
- Created the `PixelmonRendereringHelper` class for rendering the models of Pokémon.
- Probably should include changes made to packets so that they work with the new screens too.
- Added a static method `StatusType#getColor` that takes a StatusType as a parameter and returns the color of the Pokémon type (`Element#getColor`) most related to that status type.
- Changed `PixelmonClientData#getHealthColor` to be static and take the current health and max health as parameters.
- Changed `Pokemon#setMintNature` to not call `Pokemon#setNature`.
- Added `BattleStatsType#getClosestChatFormattingColorForPokePasteStat`.
- Added `ScrollableListWidget#getWidgets`.
- Added `RibbonButton#getRibbon`.
- Changed the static constant class variable `DYNAMAX_LEVELS`, set in PokeCheckerScreen, which holds the values for the colors of the Dynamax Levels, public.
- Changed `PokemonBuilder#getNature` to `PokemonBuilder#getBaseNature`.
- Added `Pokemon#getPokerus`.
- Added `BattleStatsType#getAbbreviatedTranslationName`.
- Added `Gender#getTranslatedName` and `Gender#getTranslatedNameCapitalized`.
- Added `RibbonRegistry#sort`, to sort RibbonTypes alphabetically.
- Added `Pokemon#isNearlyIdenticalTo`.
- Added `ScrollableListWidget#scrollWidgetUponMouseClicked`, `ScrollableListWidget#getMouseYTranslatedToWidgetY`, and `ScrollableListWidget#getElementY`.
- Added `TabCompleteTranslateableTextField#getShowDropDown`, `TabCompleteTranslateableTextField#setShowDropDown`, `TabCompleteTranslateableTextField#getDropDownOptionAmount`, `TabCompleteTranslateableTextField#setDropDownOptionAmount`, `TabCompleteTranslateableTextField#getHeightPerDropDownOption`, `TabCompleteTranslateableTextField#setHeightPerDropDownOption`, `TabCompleteTranslateableTextField#getDropDownOptions`, `TabCompleteTranslateableTextField#setFocused`, and more stuff for just internal rendering.
- Added `Moves#getGenerationsTMTRTheImmutableAttackIsIn` to return a Component describing what generations a TM or TR exists in.
- Added `StringHelper#buildStringForConsecutiveNumbers` that returns a sequence of numbers as a string in format "1-4, 6-7, 9-11, 13".
- Added `IVStore#setIVsToRandomValues` to set the current IVStore object's IVs to new random values
- Added `Pokerus#getNameOfStrainWithInfectedToString`.
- Added `PixelmonRenderingHelper#getAllAnimations`.
- Added `AbstractClientEntity#toStringComponent`.
- Added `Pokemon#makeEggAndKeepCurrentLevel`.
- Added `StringHelper#capitalizeAllWords`.
- Added `ScrollableListWidget#getInnerHeightOfLayoutElementWidget`.
- Added `AbstractClientEntity#setOffGroundTime(int)`.
- Added `GenderProperties#getRandomPalette`.
- Replaced with the following methods: