- 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.
Rework:
- Combined all Pixelmon NPCs into a single entity, `pixelmon:npc`.
- This combined entity now has all capabilities of the former NPCs.
- The popular sidemod "tedit"'s functionality is now incliuded in all unified NPC entities.
- NPCs can now be made to be immovable.
- Immovable NPCs cannot ride other entities such as boats, minecarts, etc.
- Fishing rods will not affect immovable NPCs.
- Minecraft's teleport command will not affect immovable NPCs.
- Immovable NPCs cannot ride other entities such as boats, minecarts, etc.
- NPCs can now be children models.
- NPCs can have custom sized hitboxes.
- NPCs can have their nameplate visibility toggled.
- Right-clicking a bed while crouching will result in the NPC (whether player model or Pixelmon model) to be placed laying down on the bed.
- The NPC Editor has been reworked to work with the new NPC system.
- Old NPCs are no longer be created using the NPC Editor wand.
- The NPC Editor now has additional functionality:
- You can quickly delete NPCs by shifting whilst right-clicking the NPC with the NPC Edidor wand.
- You can now left-click blocks to open the 'Admin NPC Editor'.
- You can quickly delete NPCs by shifting whilst right-clicking the NPC with the NPC Edidor wand.
- Added a new NPC editor mode, the 'Admin NPC Editor' mode.
- Only NPCs created by the admin wand will show in the new NPC tracking UI.
- Added API functionality to extend this tracking to sidemods.
- Only NPCs created by the admin wand will show in the new NPC tracking UI.
- Added different NPC "display types":
- Pokémon
- Player
- The names "Rasgnarok" and "Isi" will result in the NPC being rendered upside down.
- Pokémon
- Added URL capability for displaying textures on NPCs:
- URL
- Player URL
- Resource Location (with fallback)
- URL
- Added NPC "interaction pipeline":
- (1) Interaction Event
- (2) Interaction Condition
- (3) Interaction Result
- (1) Interaction Event
Additions:
- A Recipe Book has been added to the Infuser, allowing players to look up what can be crafted in it.
- Added dancing sprites to the server list title.
Pokémon:
- Added Cetoddle.
- Added Cetitan.
- Added Fidough.
- Added Dachsbun.
- Added Flamigo.
Cosmetic Palettes:
- Added 'Rainbow' Flamigo.
Sounds:
- Added new Pokémon cries:[/b] 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.
Structures:
- Updated all structure Pokéloot to use the config claim settings.
- 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:[/b] Elite A-F, Grunt A-I and Gym Leader A-F.
- Added Electric Gym structure.
- 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:[/b] Elite A-F, Grunt A-I and Gym Leader A-F.
- Added Dragon Gym structure.
- 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.
Moves, Items and Abilities:
- Added rarities to all Pixelmon items.
- Added the tide smithing template to underwater ruins to replace its loot from Elder Guardians, which get spawn replaced by Overqwil.
- 21322 Added missing Z-Moves and status Z-Effects for 42 moves.
- 19366 Added smelting recipes so that Iron Hammers and Gold Hammers can be smelted into Iron Nuggets and Gold Nuggets, respectively.
- Added Alluring Voice move.
- Added Blood Moon move.
- Added Burning Bulwark move.
- Added Dragon Cheer move.
- Added Electro Shot move.
- Added Fickle Beam move.
- Added Hard Press move.
- Added Malignant Chain move.
- Added Matcha Gotcha move.
- Added Mighty Cleave move.
- Added Psychic Noise move.
- Added Supercell Slam move.
- Added Syrup Bomb move.
- Added Tachyon Cutter move.
- Added Temper Flare move.
- Added Thunderclap move.
- Added Upper Hand move.
- Added tests for Struggle move.
Spawning:
- 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.
Datapack:
- Added '_moves_' '_attack_' and '_attacks_' as aliases to the move requirement of a Poke Spec.
- Boss specs can now be used in the spawning files.
- Added the 'pokebag_blacklist' tag located at 'data/pixelmon/tags/items/pokebag_blacklist.json'.
- Added URL support to palette textures.
```json
{
"name": "none",
"sprite": "pixelmon:pokemon/001_bulbasaur/all/base/none/sprite.png",
"models": [
{
"model_predicate":[/b] {
"type":[/b] "pixelmon:[/b]always"
},
"models":[/b] [
{
"model": "pixelmon:[/b]pokemon/001_bulbasaur/all/base/none/model.pqc",
"texture": {
"type": "pixelmon:url",
"url": "YOUR URL HERE",
"target_location":[/b] "pixelmon:[/b]pokemon_models/001_bulbasaur/all/base/none/texture.png"
}
}
]
}
],
"sounds": []
}
```
Changes:
- Added a short beacon-style beam coming out of all dropped items, the color of it being based on the item's rarity.
- Added a Pokéball shadow underneath dropped items, the Pokéball icon being based on the item's rarity.
- 21249 The PokéBag will now be able to hold any item that is not defined in the _pokebag_blacklist_ tag, which is located at 'data/pixelmon/tags/items/pokebag_blacklist.json'.
- Reduced the speed at which Pokémon ascend and descend while riding them underwater by a third.
- 21370 Changed what Pokémon can be used in Sky Battles to a tag-based system.
- Any Pokémon with the "eligible_for_sky_battles", in their species json file can join a Sky Battle.
- Any Pokémon with the "eligible_for_sky_battles_with_levitate", in their species json file can join a Sky Battle if they have the Levitate ability.
- Made certain Gen 7, 8, and 9 Pokémon capable of participating in Sky Battles.
- Any Pokémon with the "eligible_for_sky_battles", in their species json file can join a Sky Battle.
- Changed the move requirement to always look for the exact word.
- Change the type requirement to only fit if a word starts with 'type' and doesn't have it inside the word.
- 21084 Changed special animations to play at the end of an idle sequence, and no longer require them to be a part of the idle sequence.
- Reduced the movement speed of aggressive Pokemon to 125% of their base movement speed.
- 19971 Lowered the height of Hisuian Typhlosion's hitbox.
- Changed the id for aluminum_base to aluminium_base to match our other items.
- Removed old anvil textures for Poké Balls.
- Charms are no longer visible if the player has the Invisibility potion effect.
- Poke Balls will now determine if they will catch a Pokemon before the Poke Ball lands.
- Make the camera only follow the Poke Ball if its not in the void and not doing its rolling animation on an air block.
- Replaced the Fiery Dance attack with Torch Song in the Revenant ability's pool of Fire type moves.
- 20269 Set the render distance of PokeStops to the render distance of the game.
- Changed all Pokéloot to match config settings by default, including structure-generated Pokéloot.
- Changed Pokéloot to now spawn break particles.
- Changed Pokéstops to use the render distance of the game.
- Removed the ugly, and often erroneous Forge ping information from the server list.
- Reduced Transistor ability to Generation 9's strength.
- BREAKING CHANGE: Changed the 'isboss' and 'areyouaboss' spec to only check if the Pokemon is specifically a boss Pokémon.
- 16777 Prevented Hoppers dumping too many items into the Cooking Pot.
- Changed the `/wiki` command to specify that the biome for Pokémon that spawn everywhere, underground, is underground.
- Changed the Poké Display to include all battle forms of Pokémon it stores.
- Changed recipe book registration to be later on startup so that Pixelmon items can be registered.
Optimization:
- Improved SMD rendering:
- Reduced the casting of the VertexConsumer interface (a very heavy operation) to once per model rather than three times per face (or once per vertex).
- Removed isEmpty check for a cached boolean.
- Reduced the casting of the VertexConsumer interface (a very heavy operation) to once per model rather than three times per face (or once per vertex).
- Improved game memory profile:
- Reduced some duplicate Strings caused by repeatedly creating a default value for every entity rather than using a constant.
- Reduced amount of garbage created (and so GC calls) by caching the hashCode for the ModelData class.
- Reduced the overhead of a lot of the SMD classes (although not by much) by changing places where List was used rather than a direct array.
- Reduced some duplicate Strings caused by repeatedly creating a default value for every entity rather than using a constant.
Config:
- Added a config option 'droppped-item-beams-enabled' to disable the dropped item beam in `graphics.yml`.
Fixes:
- 21215 Fixed Pokémon with the `'walksonwater'` property immediately dismounting the player if the player attempted to ride them on water.
- Fixed the player being dismounted if they tried to take a Pokemon capable of surfing and ride it underwater.
- 21276 Fixed diamonds, enchanted golden apples, and netherite upgrade smithing templates being missing from the bastion treasure loot table.
- 21357 Fixed a species of Pokémon not appearing in the Pokédex due to one form of a species being labeled as 'undexable'.
- Fixed the PP Up and PP Max missing from the PokéMart's potential sell items for certain languages.
- Fixed Smelt not auto-smelting a certain number of items based on the move Smelt is known from.
- Fixed Foraging ignoring an item's biome conditions.
- 21236 the /pokebattle command not providing tab completion for nearby NPC Trainers.
- Fixed PP Ups and PP Maxs not increasing the PP past 160% of its base PP when a move is set to have a higher max PP than default.
- Fix Staryu, Shellder, Vaporeon, Marill, and Azumarill occasionally not being able to spawn due to their file using '_baseBlocks_' instead of '_baseBlock_'.
- 21062 Fix Pokémon with their spawning location type set to 'Air' spawning underground instead of in the air.
- Fixed the trim smithing templates being missing from our loot tables.
- Fix Pokémon being able to access Galarian forms in the Poké Display if the form sent into the Poké Display was not a Galarian form.
- 16064 Fixed the Therian forms not using their flying animation as their walk animation.
- 16113 Fixed the previous and next arrow buttons not appearing in the summary page for Pokémon when the Pokémon was stored in the PC.
- Fixed the Clauses list and the Selected Clauses list not showing any battle clauses on the Battle Rules screen.
- Fixed the Infuser not displaying progress towards the next crafted item.
- 18778 Fixed Poké Balls failing to catch Pokémon if they fell into the void.
- 21507 Fixed an error in console that occurred when the move requirement of a Poke Spec failed.
- Fixed Pokemon not transforming via Illusion, Transform, or Imposter.
- Fixed a server crash that could occur if a player being targeted by a Pokemon switched from survival to creative.
- 21551 Fixed Pokemon moving really slowly.
- 17660 Fixed Pixelmon Paintings being rendered black if a block was placed above its left half.
- Fixed Mirror Herb not being obtainable in forest biomes.
- Fixed Max Mushrooms not spawning in the Mushroom Fields biome.
- Fixed the external move Rock Smash not being able to break any blocks that fit in the Forge category of stone, cobblestone, sandstone, ore, or end stone.
- Fixed the external move Rock Smash considering all blocks as underground.
- 20002 Fixed the external move Rock Smash never dropping the destroyed block.
- Fixed placing Clocks facing the player instead of attaching to the surface of the clicked block.
- 20262 Fixed players being unable to give their Battle Bond form Greninja the Zombie palette.
- Fixed the interaction changing a Pokemon to the Zombie palette working during the day.
- 19959 Fixed commands that accept a player as an argument to return 'Player Not Found' when a player doesn't exist, instead of returning with the argument changed to the user of the command.
- Fixed a big error appearing in the console/logs when using "/tiershow \[tier\]".
- Fixed "/tiershow" not ignoring the letter case of the given tier.
- Fixed a server crash occurring when a player's leading Pokemon in their party held a Cleanse Tag and prevented the server from spawning a Pokemon.
- Fixed PokeStops not spawning break particles.
- Fixed PokeStop break particles being only grey colored instead of the PokeStop's color.
- Fixed the recoil evolution condition requiring more than the required HP damage, and not the exact amount, affecting Basculin and Basculegion.
- Fixed Sinistea and Polteageist having their forms named incorrectly in Pixelmon forms.
- Fixed the Pokémon class not being able to be used for evolving, no longer requiring the entity, fixing issues where entities disappear mid-evolution.
- Fixed `canSeeSky` ignoring `seesSkyException` blocks.
- 21129 Fixed custom evolution trees not working properly by fixing datapack load order and spec validation.
- Fixed non-base Pokéballs causing a crash when failing a raid catch.
- Fixed EV-boosting items and Pokérus not boosting EV gain.
- Fixed crashes caused by loading models without animations by adding a blank transformation per bone.
- Fixed error messages displaying for animation-less models not describing what model is causing the issue.
- Fixed 'RequestCloseEditingPlayerPacket' accessing the logical client from the server.
- Fixed /pokestats accessing the logical client from the server.
- Fixed the default server's list 1.20 URL.
- 21565 Fixed a crash caused by `/pokebomb`.
- 20502 Fixed client crashes caused by models or textures no longer being present after a resource reload (from switching resourcepacks) and a host of 'missing textures' being displayed incorrectly.
- 21577 Fixed abilities remaining unchanged after evolution until Pokémon refreshed.
- 21237 Fixed an error caused by a Move Spec move requirement failing.
- Fixed the recipe book erroneously calling client classes from server setup.
- 21511 Fixed wrong entries appearing in the server listing after a direct connection entry.
- 21438 Fixed servers not being addable to the server list.
- Fixed servers not being editable in the server list.
- 21421 Fixed a server crash caused by wrongful imports.
- Fixed Pokémon that are being ridden in flight to stop flying when mega-evolving in battle despite the mega-evolution being capable of flight.
- Fixed Politoed's base texture having the wrong colour of antennae.
- Fixed the hotbar not appearing on a player's screen after taking a photo of a Pokémon.
Battles:
- Fixed G-Max Gold Rush and Pay Day displaying 'literal{}' for the player receiving the money at the end of a battle.
- Fixed Pokémon flying in the air during a battle from falling out of the sky when they tried to Mega Evolve.
- Fix moves requiring a Z-Crystal of a type different than the type of a move.
- Removed the ability to turn Struggle into a Z-Move.
- Fixed erratic battle camera movement by preventing the camera from updating its position if it has been set to be removed.
- Fixed Pokémon not transforming via Illusion, Transform, or Imposter.
- Fixed transformed Pokémon not displaying species-unique particles.
- Pokémon Transforming can now transform into the correct gender, instead of always being male.
- 18778 Fixed an occurrence of the waiting glitch if a Poké Ball fell into the void during a battle.
- Fixed the MissingNo sprite being displayed for Alter palette Mega Rayquaza instead of the default Mega Rayquaza sprite.
- Fixed zooming in and out with the battle camera not working.
- Fixed the mouse scroll wheel not zooming in and out of battle.
- Fixed Ice Face not repairing in Snow.
- Fixed Ice Face repairing when sent out at the same time weather is removed.
- Fixed Wandering Spirit being able to trigger off of non-max moves from raid Pokémon.
- Fixed Truant to block move if gained via a Mega-Pokémon's ability the turn it mega-evolves.
- Fixed Ruination not doing minimum 1 damage.
- Fixed Power Construct getting the wrong HP if below the normal maximum HP.
- Fixed Hydro Steam ignoring Desolate Land.
- Fixed Booster Energy restoring higher leveled stats in a LevelCap battle.
- 21361 Fixed Trick deleting held items when known by higher level AI trainers.
- Fixed Defiant triggering from allies' moves.
- Fixed Solar Beam power getting halved in strong wind.
- Fixed missing battle messages when a Terrain Seed is consumed.
- Fixed Room Service not activating when the holder didn't use Trick Room.
- Fixed Life Orb doing recoil damage for each damaged Pokémon in a spread move.
- 21193 Fixed battle music not playing at all when you enter a battle.
- 18237 Fixed battle music overlapping if you quickly enter and leave battles.
Translation:
- Updated Traditional Chinese translation.
Developer:
- The Transform packet now uses entity UUIDs. It also no longer includes data for particles and instead includes data for gender.
- Added new tests to make sure the spec requirements for ability, ball, cancrowned, generation, growth, nature, nickname, pokerus, and status all work.
- Split a variable that handled cancelling the evolution and closing the Evolve Screen into two separate variables so that they can be done independently.
- To align with moving to use the Pokemon class this deprecates:[/b]
- `Evolution#doEvolution(PixelmonEntity, String)` in favor of `Evolution#doEvolution(Pokemon, String)`
- `Evolution#finishedEvolving(PixelmonEntity)` in favor of `Evolution#finishedEvolving(Pokemon)`
- `EvolutionQuery(PixelmonEntity, Evolution, String)` in favor of `EvolutionQuery(Pokemon, Evolution, String)`
- `EvolutionQuery(PixelmonEntity, Stats)` in favor of `EvolutionQuery(Pokemon, Stats)`
- `EvoCondition#passes(PixelmonEntity)` in favor of `EvoCondition#passes#(Pokemon)`
- `Evolution#doEvolution(PixelmonEntity, String)` in favor of `Evolution#doEvolution(Pokemon, String)`
- Delay the spec validation until after the datapack files are loaded via Pixelmon.
- This means the spec error will likely appear when you attempt to evolve the custom Pokemon, or run commands such as the wiki command.
- This is likely the only way to do this as we cannot guarantee load order and with the new spec validation system the Pokemon has to exist for the species requirement, therefore we must delay the "get" call.
- This means the spec error will likely appear when you attempt to evolve the custom Pokemon, or run commands such as the wiki command.
- Added the ability to set and get the random seed used by battles.
- Added BattleRandomSource, an implementation of RandomSource which is supplied with another RandomSource implementation to use for battles.
- Allows setting of seed used in a given battle, and retrieval of the seed used by a battle, including if randomly determined.
- Added and changed a number of the random methods to be named better.
- Added BattleRandomSource, an implementation of RandomSource which is supplied with another RandomSource implementation to use for battles.
- BREAKING CHANGE: Battles no longer use RandomHelper, except in cases where the BattleController isn't available yet, or cases of client-side only use.
- BREAKING CHANGE: `TickHandlerBase#onTick` now returns a boolean value for whether the tick handler should be removed or not, changing from returning void.
- Added improved BattleEndCause API.
- This allows for more specific/precise reasoning for when a battle is ended. Therefore, letting sidemod developers have a deeper level of control over what to do for different scenarios.
- Added registry `PixelmonRegistry#battleEndCause`.
- This allows for more specific/precise reasoning for when a battle is ended. Therefore, letting sidemod developers have a deeper level of control over what to do for different scenarios.
```java
@Mod.EventBusSubscriber(modid = Pixelmon.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class NewBattleCauses {
@SubscribeEvent
public static void onRegister(RegisterEvent event) {
event.register(PixelmonRegistry.BATTLE_END_CAUSE_REGISTRY, helper -> {
helper.register(BattleEndCause.FORFEIT.id(), BattleEndCause.FORFEIT);
});
}
}
```
- Added a builder for requirements to allow for much easier creation of simplistic requirements.
- Obviously for more complicated requirements, such as the logical ones, it still requires a class.
```java
PokemonSpecificationProxy.register(PokemonSpecificationProxy.requirementBuilder(Boolean.class)
.aliases("isboss", "areyouaboss")
.booleanParser()
.dataMatcher((pokemon, aBoolean) -> false)
.dataApplier((pokemon, aBoolean) -> {})
.minecraftMatcher((pixelmonEntity, isBoss) -> pixelmonEntity.isBossPokemon())
.minecraftApplier((pixelmonEntity, isBoss) -> pixelmonEntity.setBossTier(isBoss ? BossTierRegistry.getRandomBossTier() :[/b] BossTierRegistry.NOT_BOSS))
.build());
```
- Added method to BattleLog to search for and compare the ordering of two specific strings within battle messages.
- Replaced method returns of type ArrayList with the generic List within BattleController and BattleParticipant.
- Replaced various usages of Stream with enhanced-for within BattleController.
- BREAKING CHANGE: Deprecated the old `Dialogue` API and the events.
- BREAKING CHANGE: Refactored the "DialogueInputScreen" API to "DialogueFactory".
- BREAKING CHANGE: Added a lot of options to the new Dialogue API:[/b]
- You can now add infinite buttons.
- Button interactions now have a response for seemless UI transitioning.
- You can now chose to hide or show the Minecraft UI behind the Dialogue UI.
- Buttons can now have a background color, and hover background color setting.
- Buttons can now have "accepted inputs" to where the button press will only be accepted when all the requirements are met.
- When the accepted input requirements are not met buttons now have errors displayed for a short period of time.
- The input box can now have "accepted inputs" to change the characters the user can enter. For example, only allowing numbers entered.
- The maximum text input length can now be modified.
- You can use a Component for the default input text value (allowing for translation keys).
- You can now specify the button, and close, handlers directly on the Builders.
- You can now add infinite buttons.
- Added the method `BattleBuilder#logResult` which will force the log to be printed at the end of the battle.
- Changed some resource locations to just use the already-created static values from Resources.java.
- Removed ResourceLocations from images that were no longer used, were missing, or were redundant.
- Removed several image files for UIs that are no longer used.
- Removed old ReceivedModListEvent.java, which was not implemented anywhere.