"1.21.1 (9.3.2)"
saves/WORLDNAME/playerdata/pokemon
目录,以提升组织性和一致性。旧数据将在首次运行时自动迁移到新位置。money_multiplier
上下文键的支持。AttackRegistry
添加了实用方法,用于检索随机伤害招式,可选择是否兼容Z招式。Attack#isAttack()
,以考虑被覆盖的招式类型,如Z招式和极巨化招式。ImmutableAttack#getZMove(PixelmonWrapper, boolean)
,以支持变身后Pokémon的Z招式逻辑。ApplyBonusStatsEvent
不再触发,减少了不必要的日志刷屏。InteractionContext
系统,将其重命名为 StoredContext
并移出NPC包,以便更广泛地使用。ContextKey#mutable
和 ContextKey#immutable
,并增加了对不可变性约束的校验。RegisterEvent
在服务端注册。StoredContext
现在是一个密封类,并支持基于 ResourceLocation
的访问,适用于NPC和研究等动态流程。StrictStoredContext
,用于在战斗引擎等系统中强制不可变性,在可变访问时抛出异常。StoredContext#strict
创建保证不可变的上下文实例,以实现安全复制和隔离。"1.21.1 (9.3.1)"
/pokeevolve
could cause the client to crash during the evolution sequence."1.21.1 (9.3.0)"
data/tcg/tcg/card/
for examples.pixelmon:raid_boss
context to the defeat raid boss interaction event.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./pokeheal
and /poketest
now use Brigadier, enabling full player selector compatibility./setraid
command has been updated.raiddrops.json
datapack file removed.raids.json
datapack file removed.PixelmonStatisticsRegistry
and a TCGStatisticsRegistry
that adds values/registry entries that keep track of action the player makes.
PixelmonStatisticsPixelmonListener
, PixelmonStatisticsMinecraftListener
, TCGStatisticsTCGListener
, and TCGStatisticsMinecraftListener.
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 PokedexServerPokedexPacket
.ShearInteractionEvent
:ShearInteractionEvent(AbstractBaseEntity pixelmon, Player player, InteractionHand hand, ItemStack itemStack)
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)
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)
CardDrawnEvent
- Occurs when a player draws a card from their deck.CardDrawnEvent(GameServerState gameServerState, Player player, int numberOfCardsDrawn, List deck, List hand)
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)
ExperienceEvent
that allows including information on the Pokemon giving the experience.ExperienceGainEvent(@Nullable BattleController controller, Pokemon pokemon, Pokemon faintedPokemon, int experience, ExperienceGainType type)
ExperienceEvent#getFaintedPokemon
ItemInteractionEvent
to have a Pre and Post event.PassivePoisonEvent
was refactored to be less redundant.EVsGainedEvent
:Item(Pokemon pokemon, EVStore evStore, EVYields evYields, ItemStack itemStack)
.InteractionPerilousSoup
.EVGainEvent
:faintedPokemon
class variable and EVGainEvent#getFaintedPokemon
.EVGainEvent(Pokemon pokemon, Pokemon faintedPokemon, EVYields originalEVYields, EVYields evYields)
to handle the new variable while deprecating the old one.DoubleYieldEvent
subclass and all the Pre and Post subclasses to match.FishingEvent.Reel
isItem()
and getItemStack()
CurryFInishedEvent
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.PokemonBase#isJumpPalette
, PokemonBase#isJumpPaletteForMagikarp
, PokemonBase#isJumpPaletteForSlugma
, PokemonBase#isJumpPaletteForSpheal
, PokemonBase#isJumpPaletteForShellos
, PokemonBase#isJumpPaletteForClobbopus
.PixelmonPalettes
:
BattleController#applyEndOfBattleEffectsAndRestoreItems
from code that was in BattleController#endBattle
.
Experience
to create a Experience#hasExpAll
from code that was in Experience#awardExp
.PlayerControlledMovement#updatePosition
for when #getCameraTarget
returned null.
@Nullable
identifier to getCameraTarget()
.BikeEntity
, overrode Entity#move(MoverType, Vec3)
so that we could run BikeEntity#awardStatsForRiding(Entity, Vec3)
.
AbstractMovesEntity
with AbstractMovesEntity#awardStatsForRidingPixelmon
.InteractionTechnicalMove
and InteractionTM
to create the private boolean isUnableToLearn(PixelmonEntity, Player, ItemStack, ImmutableAttack)
from code from the processInteract(PixelmonEntity, Player, InteractionHand, ItemStack)
.PixelmonBlockTags
for the data tags that already exist:
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)
EVYields#getTotalCount
.
IncreaseEVItem#adjustEVs(PixelmonEntity, ItemStack)
always passing in 1 EV to the EVsGainedEvent
, even if Vitamins were used.DecreaseEVBerryItem#berryEVs(PixelmonEntity)
in favor of DecreaseEVBerryItem#berryEVs(PixelmonEntity, ItemStack)
.EVStore#getPerilousSoupEVYield
.EVStore#subtractEVsOfType(BattleStatsType, int, int)
and replaced the logic in EVStore#berryEVs(BattleStatsType)
with that.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)
.
ExecuteActionGoal
:ExecuteActionGoal#tick
now is mostly split into ExecuteActionGoal#moveSkill(LivingEntity)
, ExecuteActionGoal#attackPlayer(LivingEntity)
, ExecuteActionGoal#attackPixelmonEntity(LivingEntity)
.Pokemon#isParadox
and FormTags#isParadox
for the new PARADOX
tag in Tags
.Lcom/pixelmonmod/pixelmon/api/pokemon/PokemonBuilder;build(Ljava/util/function/Supplier;)Lcom/pixelmonmod/pixelmon/api/pokemon/Pokemon;
PixelmonWrapper#writeChangesToOriginalPokemon
that is called every move to record persistent changes to the original Pokemon's data.PokemonLink
, DelegateLink
, and WrapperLink
.HeldItem#postProcessDamagingAttackSubstitute
.deprecated
.HeldItem#preventsEffectsOfWeather
.HeldItem#onItemLost
.HeldItem#cantMiss
now takes a 2nd PixelmonWrapper
parameter."1.20.2 (Alpha 10)"
size
Pokémon spec.growth_data
in forms.crafted_gingko_blocks
to crafted_ginkgo_blocks
tag.chest_boats
tag.mineable/axe
tag so they can be mined faster with axes.PokemonStorage#forEach
method, and implementations for each kind of storage."这儿有好几打的我们,好几打!"
/setraid
命令的使用提示消息onGlobalStatusAdded
方法并将其应用至了道具:客房服务上