- The Java requirement for 1.21.1 is Java 21. This will come shipped with most launchers. For manual installation, you may need to install a later JRE.
- The minimum Neoforge version for this update is Neoforge 21.1.162 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.
Version Update:
- Updated Pixelmon to version 1.21.1.
- Updated Pixelmon to Neoforge 21.1.162 for Minecraft 1.21.1.
Additions:
- Added research searching.
- Added Daycare keybind, using [M] by default.
- Added Research keybind, using [N] by default.
Moves, Battle Items and Abilities:
- Added Poison Puppeteer ability.
- Added the Utility Umbrella held item.
Datapack:
- Moved Card Conditions, Rarity, Attack Effects, Card Attacks, Card Powers, Card Types, Damage Effect, Damage Bonus Effect, Energy, Card Backs, Coins, Card Conditions, Card Sets, Theme Decks, Trainer Effects, and Cards to Minecraft Registries / tags where applicable.
- Datapackable objects include Card Rarity, Card Set, Cards, Theme Decks, Coins, Card Backs. See data/tcg/tcg/card/ for examples.
- Added tags to encapsulate what cards are in sets, allowing for the ability to modify / add custom own cards without replacing every JSON.
- Added new Pokémon to Mount Boost move skill: Tauros, Mantine, Sharpedo, Latias, Bouffalant, Mudsdale, Wyrdeer and Basculegion.
- Added pixelmon:raid_boss context to the defeat raid boss interaction event.
- Added two datapack registries for raids:
- pixelmon/pixelmon/raid/ally - controls the NPC allies that can appear with you in a raid.
- pixelmon/pixelmon/raid/spawn - controls the spawning of raid Pokemon.
- Updated raid drops to be now defined using the Minecraft loot table system.
Statistics:
- Added Pixelmon statistics to the [ESC] Minecraft statistic screen, including:
- Added "Eggs Hatched" statistic tracking.
- Added "Legendary Pokémon Caught" statistic tracking.
- Added "Mythical Pokémon Caught" statistic tracking.
- Added "[All] Pokémon Caught" statistic tracking, where all refers to all possible parameters, including palettes (Valencian, Ashen, etc), sizes (XXS, XS, etc), and more.
- Added "Pokémon Evolved" statistic tracking.
- Added "Shiny Pokémon Caught" statistic tracking.
- Added "Pokéball [Action]" for statistic tracking.
- Added battle actions for statistic tracking, including critical hits, KOs, and more.
- Added boss actions for statistic tracking, including defeated per tier and type, such as raids and wild bosses.
- Added breeding actions for statistic tracking, including hatching, breeding, Ditto and more.
Battle Tests:
- Held Items Eject Button, Lagging Tail, Loaded Dice, Mirror Herb, Smoke Ball, Mental Herb, Scope Lens, Razor Claw, Binding Band, Power Herb, Air Balloon, Oran Berry, Enigma Berry, Berry Juice, Bright Powder, Float Stone, Expert Belt, Focus Band, Deep Sea Scale, Deep Sea Tooth, Zoom Lens, Leek, Light Ball, Lucky Punch, Metal Powder, Quick Powder, Thick Club, Macho Brace, Power Items, Toxic Orb, Absorb Bulb, Cell Battery, Luminous Moss, Snowball, TypeEnhancingItems, Memory items, Weather Rocks, Wide Lens, Grip Claw, Light Clay, Sticky Barb, Terrain Extender, Big Root, Destiny Knot, Red Orb, Blue Orb, Wise Glasses, Muscle Band, Blunder Policy
- Abilities Oblivious, Adaptability, Aroma Veil, Compound Eyes, Competitive, Motor Drive, Merciless, Terrain Seed
Changes:
- Updated Research UI for improved visuals and readability.
- Updated /pokeheal and /poketest to use Brigadier, supporting all player selectors.
- Updated Spyglass so that players can no longer open their Pokédex while using it.
- Updated particle effects to Pokémon affected by Mount Boost's speed boost move skill.
- Updated the PokéEditor with an error message when failing to import a Pokemon with an invalid held item.
- Updated the Pixelmon Oven block to act like a furnace.
- 16708 Removed the increase-spawn-levels-by-distance from spawn settings.
- Updated outside of battle capture config setting to a list of dimensions that allow outside of battle capture instead.
- Updated /setraid command.
- Removed raiddrops.json datapack file.
- Removed raids.json datapack file.
Rendering:
- Adds CachedModelLoader interface for different types of model loading.
- Updates all Pixelmon shaders to use the new style of rendering.
- Pushes all rendering math to the GPU, via the shaders.
- Adds a custom VertexFormat so that we can utilise direct OpenGL calls
- This allows us to upload models to buffers when first loaded so that we don't have to calculate the data for each vertex every time we render the model.
- Adds Assimp to load blocky models from Gltf format.
Fixes:
- Resolved an issue causing misalignment between Pokéstop hitboxes and their models.
- Zygarde Cells now spawn correctly in singleplayer worlds.
- Addressed a bug where Zygarde Cells would fail to spawn while in spectator mode.
- Fixed a case where Pokémon caught in Raids would gain incorrect abilities after evolving or changing forms.
- The Infuser block and its associated recipes have been corrected and now function as intended.
- The notification screen for Pokérus infection now displays properly.
- NPC Editor now correctly displays available presets for selection.
- Resolved a client crash triggered by resizing the NPC Editor window.
- The delete function in the NPC Editor has been restored.
- Fixed NPCs responding twice to right-clicks with an empty hand; default interaction now properly checks the used hand.
- Corrected numerical offsets in Paldean TMs; existing TMs remain unaffected.
- Cloning Machines no longer delete Mew upon being broken.
- The hotbar now returns correctly after zooming with the camera and changing items via scrolling.
- Spyglass use no longer overlaps with the Pixelmon team UI.
- Teleport and Fly now function correctly across dimensions after relaunching the server or game.
- Oval and Shiny Charms are now granted immediately upon meeting the required conditions.
- Mount Boost now properly applies a speed increase while mounted on a Pixelmon.
- Legendary Bird Orbs now update progress correctly when defeating Pokémon in horde battles.
- Raw Tumblestones are now visible in the Creative Mode inventory.
- Fixed a crash occurring during Cloning Machine activation.
- Prevented multiplayer server crashes caused by placing Lures in the Lure slot.
- Resolved a crash when searching for and selecting Pokémon stored outside Box 1 via the PC.
- Ribbon and Egg Moves UI panels now update properly when navigating between Pokémon.
- Pokémon hatched from Eggs now inherit correct size scaling from parents.
- Shiny odds are now properly respected for Tower Bells, Porygon crafting, Ditto transformations, vanilla mob replacements, and group spawns.
- Fusion data is now properly cleared from Pokémon NBT upon being unfused.
- Fixed a crash caused by interacting with the TCG Rulebook.
- Shiny Charm config now applies across all methods, not just breeding.
- Evolution screen UI no longer freezes during an attempted evolution.
- Assignment rendering is now visually consistent with research rendering.
- EvoRockCondition now correctly considers rock types.
- Dusk Ball logic now checks for rain independently of other conditions.
- Starter Pokémon now come with the correct partner ribbon and level.
- Text alignment issues in the Research screen have been corrected.
- Scroll bar and layout issues when more than three Research rewards are present have been fixed.
- Reward text in the Research screen now uses distinct coloration for clarity.
- Resolved various resizing and layout inconsistencies in the Research tab.
- Click zones for rewards under the Research tab are now more responsive.
- Fixed a rare crash in PokéEditor when modifying a Pokémon’s moveset.
- Fixed a crash triggered upon successfully catching a Pokémon.
Battles:
- Resolved several issues with Eject Button behavior:
- No longer activates when damage is taken by a Substitute.
- Only one Eject Button can activate per attack.
- No longer activates if removed by Knock Off.
- No longer activates if stolen via Thief, Covet, or Magician.
- No longer consumed when the holder is forcibly switched by Dragon Tail or Circle Throw.
- Stall now correctly applies priority lower than Lagging Tail.
- Compound Eyes no longer boosts the accuracy of one-hit knockout moves.
- Max Raid Boss name now displays correctly post-raid.
- Eviolite no longer boosts Gigantamax Pikachu, Meowth, or Eevee.
- Electro Shot now consumes PP correctly during rain.
- Players can now successfully flee wild battles using Teleport.
- Fixed a crash when using Teleport without a valid entity.
- Mental Herb now correctly cures Heal Block and Torment.
- Air Balloons now burst correctly even when the holder has a Substitute active.
- Symbiosis now triggers correctly when an ally’s Air Balloon bursts.
- Resolved an issue where Dragon Darts would hang if all targets fainted after the first strike.
- Stench no longer causes Flinch when using status moves.
- Muscle Band and Wise Glasses now correctly modify move power, not the user's stats.
- Bright Powder no longer affects one-hit KO moves.
- Bright Powder's evasion effect now reduces accuracy by the correct 10%.
- BattleValidator no longer fails if a multi-turn move is used with exactly 1 PP.
- Blunder Policy fixes:
- No longer activates on moves that fail to affect the target.
- No longer activates on protected targets.
- No longer activates incorrectly on partially successful multi-strike moves.
- Float Stone no longer reduces weight below 0.1 kg.
- Heavy Slam now deals correct power when the defender weighs exactly 1/3 of the attacker.
- Autotomize weight adjustment now occurs before Float Stone halving.
- Autotomize now sets minimum weight to 0.1 kg.
- Expert Belt now properly boosts move power, not final damage.
- Multi-turn moves no longer error out under Torment or Disable status.
- Torment no longer interrupts multi-turn moves mid-sequence.
- Thick Club now functions correctly on transformed Cubone and Marowak.
- Lucky Punch now functions on transformed Chansey.
- Type-enhancing items now boost base move power, not final damage output.
- Snatch now successfully steals Light Screen, Reflect, and Aurora Veil.
- Clamp now traps and deals residual damage as intended.
- Zoom Lens now checks correctly if the user moved after its target.
- Terrain Seeds now activate properly when damage is taken post-terrain change.
- Fixed consumable items (Absorb Bulb, Cell Battery, Luminous Moss, Snowball) triggering despite stats being capped or Contrary.
- Sticky Barb no longer transfers to Pokémon behind a Substitute.
- Unnerve no longer allows Berries to activate if removed during Magic Room.
- Protosynthesis no longer activates during Cloud Nine.
- Synthesis now heals properly under Mysterious Air Current.
- Flower Gift now correctly increases allies’ Special Defense by 50%.
Language:
- Translation keys for TCG items have been added to many previously hard-coded text values.
Developer:
- Adds a PixelmonStatisticsRegistry and a TCGStatisticsRegistry that adds values/registry entries that keep track of action the player makes.
- Most stats are awarded value within the PixelmonStatisticsPixelmonListener, PixelmonStatisticsMinecraftListener, TCGStatisticsTCGListener, and TCGStatisticsMinecraftListener.
- These are then handled by Minecraft and displayed in Minecraft's Statistics menu.
- New Events!
- AttackEvent.DamageDealt - Includes info on the amount of damage dealt to a Pokemon. AttackEvent.Damage is info on the potential damage that was calculated.
- PokedexOpenedEvent - Called when the player opens their Pokedex
- Added it to the ServerPokedexPacket.
- ShearInteractionEvent:
- ShearInteractionEvent(AbstractBaseEntity pixelmon, Player player, InteractionHand hand, ItemStack itemStack)
- Cancelable
- Added to ShearInteraction
- WildPixelmonAttackEvent - An event that happens when a Wild Pixelmon is the one to initiate a battle with a player:
- WildPixelmonAttackEvent(Player player, PlayerParticipant playerParticipant, Pokemon playersFirstPokemon, Mob wildPixelmonEntity, BattleParticipant wildPixelmonParticipant)
- Placed into ExecuteActionGoal#attackPlayer.
- CaughtTransformedDittoEvent - Used when a PixelmonEntity is caught and the game successfully rolls to decide that the Pokemon was actually a Ditto.
- CaughtTransformedDittoEvent(Player player, PixelmonEntity previousPixelmon, PixelmonEntity ditto, EmptyPokeBallEntity emptyPokeBallEntity, boolean transformToDitto, boolean isMeltan)
- EggMovesetEvent - An event that occurs after the moves for an egg have been chosen, but before they are actually assigned to the Pokémon's moveset.
- EggMovesetEvent(Player player, Pokemon motherPokemon, Pokemon fatherPokemon, List motherEggMoves, List fatherEggMoves, List fathersTMHMTutorMoves, List levelupMoves, List lvl1Moves, List masterAttackList)
- MirrorHerbEggMoveEvent - Used when a Pokemon learns an Egg move because their partner in the DayCare knew it.
- public MirrorHerbEggMoveEvent(Player player, Pokemon mirrorHerbPokemon, Pokemon partnerPokemon, int movesetIndex, Attack newAttack)
- FriendshipChangedEvent - Used right before a Pokemon's Friendship increases or decreases.
- FriendshipChangedEvent(Pokemon pokemon, int previousFriendshipAmount, int intendedFriendshipAmount)
- RandomEggEvent - An event that occurs when a random Pokemon is generated for an egg.
- RandomEggEvent(Pokemon parentOne, Pokemon parentTwo, Pokemon pokemonInEgg)
- tcg/api/events/CardDrawnEvent - Occurs when a player draws a card from their deck.
- CardDrawnEvent(GameServerState gameServerState, Player player, int numberOfCardsDrawn, List deck, List hand)
- tcg/api/events/EnergyAttachedEvent - Should fire whenever a player places an energy card on the active or a bench Pokemon during a TCG Battle.
- EnergyAttachedEvent(PlayerServerState player, PokemonCardState pokemonCardState, ImmutableCard card, CommonCardState cardState)
- SynchronizeNatureEvent - Occurs when a player's Pixelmon with the Synchronize ability makes a Wild Pixelmon's Nature get re-rolled.
- SynchronizeNatureEvent(PixelmonWrapper synchronizeUser, PixelmonWrapper synchronizeTarget, Nature nature)
- WildPixelmonHeldItemRerolledEvent - Fires when a Pixelmon Entity tries to re-roll a held item because a nearby player has a Pixelmon with Super Luck.
- WildPixelmonHeldItemRerolledEvent(ServerPlayer serverPlayer, PlayerPartyStorage party, ItemStack heldItem, SpawnAction spawnAction)
- InfuserEvent - An event meant to be used for the Infuser. Currently only the InfuserEvent.CreateItem Pre and Post events are used. They're fired before and after an Infuser will finish the creation of an item.
- HealTeamEvent - Fires when the player's entire team would be healed, even if the player's team is already fully healed. Sleeping in a bed, using /pokeheal, and starting another battle with a player are 3 instances that aren't covered by the other event, HealerEvent.
- HealTeamEvent(UUID playerUUID)
- Changes to Events!
- Added a new constructor to ExperienceEvent that allows including information on the Pokemon giving the experience.
- ExperienceGainEvent(@Nullable BattleController controller, Pokemon pokemon, Pokemon faintedPokemon, int experience, ExperienceGainType type)
- Added ExperienceEvent#getFaintedPokemon
- Refactored the ItemInteractionEvent to have a Pre and Post event.
- PassivePoisonEvent was refactored to be less redundant.
- EVsGainedEvent:
- Added a new constructor to the Item subclass Item(Pokemon pokemon, EVStore evStore, EVYields evYields, ItemStack itemStack).
- Added the event to InteractionPerilousSoup.
- EVGainEvent:
- Added a new faintedPokemon class variable and EVGainEvent#getFaintedPokemon.
- New constructor EVGainEvent(Pokemon pokemon, Pokemon faintedPokemon, EVYields originalEVYields, EVYields evYields) to handle the new variable while deprecating the old one.
- Updated the DoubleYieldEvent subclass and all the Pre and Post subclasses to match.
- FishingEvent.Reel
- Added isItem() and getItemStack()
- CurryFInishedEvent
- Deprecated public CurryFinishedEvent(@Nullable ServerPlayer player, EnumCurryRating rating, EnumCurryKey curryKey, EnumBerryFlavor cookingFlavor) in favor of public CurryFinishedEvent(@Nullable ServerPlayer player, int quality, EnumCurryRating rating, EnumCurryKey curryKey, EnumBerryFlavor cookingFlavor). Allows us to grab the quality (a.k.a score) of the curry for our stats.
- Added a new constructor to ExperienceEvent that allows including information on the Pokemon giving the experience.
- Added PokemonBase#isJumpPalette, PokemonBase#isJumpPaletteForMagikarp, PokemonBase#isJumpPaletteForSlugma, PokemonBase#isJumpPaletteForSpheal, PokemonBase#isJumpPaletteForShellos, PokemonBase#isJumpPaletteForClobbopus.
- Added palettes missing from PixelmonPalettes:
- APRICOT_SAUCY
- BLUE_STRIPES
- MOONS
- GOLDW
- GOLDE
- Created a private BattleController#applyEndOfBattleEffectsAndRestoreItems from code that was in BattleController#endBattle.
- Refactored Experience to create a Experience#hasExpAll from code that was in Experience#awardExp.
- Fixed a NPE in PlayerControlledMovement#updatePosition for when #getCameraTarget returned null.
- Added a @Nullable identifier to getCameraTarget().
- In BikeEntity, overrode Entity#move(MoverType, Vec3) so that we could run BikeEntity#awardStatsForRiding(Entity, Vec3).
- Nearly identical thing in AbstractMovesEntity with AbstractMovesEntity#awardStatsForRidingPixelmon.
- Refactored InteractionTechnicalMove and InteractionTM to create the private boolean isUnableToLearn(PixelmonEntity, Player, ItemStack, ImmutableAttack) from code from the processInteract(PixelmonEntity, Player, InteractionHand, ItemStack).
- Added several new static tags in PixelmonBlockTags for the data tags that already exist:
- DAY_CARES
- PCS
- TRADE_MACHINES
- TVS
- VENDING_MACHINES
- Refactored PokerusSpreader to create new functions to make things more legible and to hopefully make this class more clear on how it works.
- private static void spreadToParty(PlayerParticipant participant)
- private static void forEachAttackVerifyIfAttackerCanReceivePokerus(BattleEndEvent event, List<UUID> winners)
- private static void forEachSuccessfulAttackOnInfectedOpponentAttemptToSpreadPokerusToAttacker(AttackAction attackAction, Map<UUID, List<UUID>> analyzedMap, UUID receiverUUID)
- private static void spread(PokerusStrain donorType, PixelmonWrapper wrapper, PlayerPartyStorage storage)
- Added EVYields#getTotalCount.
- Fixed IncreaseEVItem#adjustEVs(PixelmonEntity, ItemStack) always passing in 1 EV to the EVsGainedEvent, even if Vitamins were used.
- Deprecated DecreaseEVBerryItem#berryEVs(PixelmonEntity) in favor of DecreaseEVBerryItem#berryEVs(PixelmonEntity, ItemStack).
- Added EVStore#getPerilousSoupEVYield.
- Added EVStore#subtractEVsOfType(BattleStatsType, int, int) and replaced the logic in EVStore#berryEVs(BattleStatsType) with that.
- Added EVStore#gainEVYields(EVYields) which returns an EVYields of the EVs that were actually applied to the Pokemon (in case of the Pokemon having or almost having the max amount of EVs overall or for one stat). This overloads the other gainEVYields function. The calculation of which EVs are actually applied is done by the new EVStore#calculateEVYieldsWithinMaximumLimits(EVYields).
- Refactored code in ExecuteActionGoal:
- Code in ExecuteActionGoal#tick now is mostly split into ExecuteActionGoal#moveSkill(LivingEntity), ExecuteActionGoal#attackPlayer(LivingEntity), ExecuteActionGoal#attackPixelmonEntity(LivingEntity).
- Fixed the Warp Plate block so that it no longer pushes Survival players off if they walk into it and then triggering the WarpPlateEvent on repeat, forcing players to have to jump to the block to have to teleport.
- Added Pokemon#isParadox and FormTags#isParadox for the new PARADOX tag in Tags.
- Moved most TCG Resources to use ResourceWithFallback.
- Removed unused CardWelcomeScreen.
- Added PokemonStorage#getAllNonNull, which returns an array of all Pokémon in the storage without any null elements. Added PokemonStorage#getAllNonNull, which returns an array of all Pokémon in the storage without any null elements.
- Changed PixelmonWrapper to extend Pokemon.
- Added Lcom/pixelmonmod/pixelmon/api/pokemon/PokemonBuilder;build(Ljava/util/function/Supplier;)Lcom/pixelmonmod/pixelmon/api/pokemon/Pokemon;
- Changed PixelmonWrapper to make a copy of the Pokemon.
- Added PixelmonWrapper#writeChangesToOriginalPokemon that is called every move to record persistent changes to the original Pokemon's data.
- Removed PokemonLink, DelegateLink, and WrapperLink.
- Added HeldItem#postProcessDamagingAttackSubstitute.
- Marked TripleAxel, TripleKick, and PopulationBomb as deprecated.
- Updated raid capture events to extend the standard capture events.
- Updated the raid API to always have a Pokémon.
- Updated raid spawning API to use Pokémon specs.
- Added SpawnReplacement Mojang datapack registry.
- Added HeldItem#onStatusRemoved and HeldItem#onGlobalStatusRemoved.
- Added HeldItem#preventsEffectsOfWeather.
- Added HeldItem#onItemLost.
- HeldItem#cantMiss now takes a 2nd PixelmonWrapper parameter.