UNPKG

isaac-typescript-definitions

Version:

TypeScript definitions for The Binding of Isaac: Repentance.

1,011 lines (938 loc) 28.9 kB
export enum ModCallback { /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `EntityType` provided. * * ```ts * function postNPCUpdate(npc: EntityNPC): void {} * ``` */ POST_NPC_UPDATE = 0, /** * You cannot filter this callback. * * ```ts * function postUpdate(): void {} * ``` */ POST_UPDATE = 1, /** * You cannot filter this callback. * * ```ts * function postRender(): void {} * ``` */ POST_RENDER = 2, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `CollectibleType` provided. * * ```ts * function useItem( * collectibleType: CollectibleType, * rng: RNG, * player: EntityPlayer, * useFlags: BitFlags<UseFlag>, * activeSlot: int, * customVarData: int, * ): * | boolean * | { Discharge: boolean; Remove: boolean; ShowAnim: boolean } * | undefined; * ``` */ POST_USE_ITEM = 3, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `PlayerType` provided. * * ```ts * function postPEffectUpdate(player: EntityPlayer): void {} * ``` * * @deprecated Consider using the `ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED` callback from * `isaacscript-common` instead, since it will fire in the correct order and prevent * bugs relating to data structures not being properly initialized. */ POST_PEFFECT_UPDATE = 4, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `CardType` provided. * * ```ts * function postUseCard( * cardType: CardType, * player: EntityPlayer, * useFlags: BitFlags<UseFlag>, * ): void {} * ``` */ POST_USE_CARD = 5, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `FamiliarVariant` provided. * * ```ts * function postFamiliarUpdate(familiar: EntityFamiliar): void {} * ``` */ POST_FAMILIAR_UPDATE = 6, /** * Unlike in Afterbirth+, in Repentance this callback properly populates the following fields: * * - `Position` * - `SpawnerEntity` * - `SpawnerType` * - `SpawnerVariant` * - `Velocity` * * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `FamiliarVariant` provided. * * ```ts * function postFamiliarInit(familiar: EntityFamiliar): void {} * ``` */ POST_FAMILIAR_INIT = 7, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `CacheFlag` provided. * * Note that you can only use single `CacheFlag` values as a third argument. (You cannot use a * combination of two or more `CacheFlag`.) * * ```ts * function evaluateCache(player: EntityPlayer, cacheFlag: CacheFlag): void {} * ``` */ EVALUATE_CACHE = 8, /** * This will fire at the beginning of a run, upon continuing a saved run, and when a player enters * a Genesis room. * * For most cases of general purpose player initialization, you should use the * `POST_PLAYER_INIT_FIRST` custom callback instead (in order to exclude the case of a player * continuing a saved run). * * This callback has a special property where most `EntityPlayer` methods (such as e.g. * `EntityPlayer.AddCollectible`) will silently fail if the player is continuing a saved run. * (This behavior was introduced in Repentance.) See the docs for more details about which * specific methods are affected. * * The `isChildPlayer` helper function does not work in this callback (because * `EntityPlayer.Parent` is not initialized yet at this point). If you want to exclude non-real * players, use the `POST_PLAYER_INIT_FIRST` or the `POST_PLAYER_INIT_LATE` custom callbacks * instead. * * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `PlayerVariant` provided. * * ```ts * function postPlayerInit(player: EntityPlayer): void {} * ``` */ POST_PLAYER_INIT = 9, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `PillEffect` provided. * * ```ts * function postUsePill( * pillEffect: PillEffect, * player: EntityPlayer, * useFlags: BitFlags<UseFlag>, * ): void {} * ``` */ POST_USE_PILL = 10, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `EntityType` provided. * * ```ts * function entityTakeDmg( * entity: Entity, * amount: float, * damageFlags: BitFlags<DamageFlag>, * source: EntityRef, * countdownFrames: int, * ): boolean | undefined {} * ``` */ ENTITY_TAKE_DMG = 11, /** * You cannot filter this callback. * * ```ts * function postCurseEval(curses: BitFlags<LevelCurse>): BitFlags<LevelCurse> | undefined {} * ``` */ POST_CURSE_EVAL = 12, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `InputHook` provided. * * ```ts * function inputAction( * entity: Entity | undefined, * inputHook: InputHook, * buttonAction: ButtonAction, * ): boolean | float | undefined {} * ``` */ INPUT_ACTION = 13, /** * You cannot filter this callback. * * ```ts * function postGameStarted(isContinued: boolean): void {} * ``` * * @deprecated Consider using the `ModCallbackCustom.POST_GAME_STARTED_REORDERED` callback from * `isaacscript-common` instead, since it will fire in the correct order and prevent * bugs relating to data structures not being properly initialized. */ POST_GAME_STARTED = 15, /** * You cannot filter this callback. * * ```ts * function postGameEnd(isGameOver: boolean): void {} * ``` */ POST_GAME_END = 16, /** * You cannot filter this callback. * * ```ts * function preGameExit(shouldSave: boolean): void {} * ``` */ PRE_GAME_EXIT = 17, /** * Unlike the `POST_GAME_STARTED` callback, this callback does not fire when resuming a saved run. * * You cannot filter this callback. * * ```ts * function postNewLevel(): void {} * ``` * * @deprecated Consider using the `ModCallbackCustom.POST_NEW_LEVEL_REORDERED` callback from * `isaacscript-common` instead, since it will fire in the correct order and prevent * bugs relating to data structures not being properly initialized. */ POST_NEW_LEVEL = 18, /** * You cannot filter this callback. * * ```ts * function postNewRoom(): void {} * ``` * * @deprecated Consider using the `ModCallbackCustom.POST_NEW_ROOM_REORDERED` callback from * `isaacscript-common` instead, since it will fire in the correct order and prevent * bugs relating to data structures not being properly initialized. */ POST_NEW_ROOM = 19, /** * You cannot filter this callback. * * ```ts * function getCard( * rng: RNG, * cardType: CardType, * includePlayingCards: boolean, * includeRunes: boolean, * onlyRunes: boolean, * ): CardType | undefined {} * ``` */ GET_CARD = 20, /** * You cannot filter this callback. * * ```ts * function getShaderParams(shaderName: string): Record<string, unknown> {} * ``` */ GET_SHADER_PARAMS = 21, /** * You cannot filter this callback. * * ```ts * function executeCmd( * command: string, * parameters: string, * player: EntityPlayer, * ): void {} * ``` */ EXECUTE_CMD = 22, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `CollectibleType` provided. * * ```ts * function preUseItem( * collectibleType: CollectibleType, * rng: RNG, * player: EntityPlayer, * useFlags: BitFlags<UseFlag>, * activeSlot: ActiveSlot, * customVarData: int, * ): boolean | undefined {} * ``` */ PRE_USE_ITEM = 23, /** * If you want to prevent an entity from spawning, you cannot return an `EntityType` of 0, since * that will cause the game to crash. * * Sometimes, if you return a type other than the original type (e.g. replacing a pickup with an * effect), the game will crash. Thus, you should replace a pickup with a new pickup, and so on. * * You cannot filter this callback. * * ```ts * function preEntitySpawn( * entityType: EntityType, * variant: int, * subType: int, * position: Vector, * velocity: Vector, * spawner: Entity | undefined, * initSeed: Seed, * ): [entityType: EntityType, variant: int, subType: int, initSeed: Seed] | undefined {} * ``` */ PRE_ENTITY_SPAWN = 24, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `FamiliarVariant` provided. * * ```ts * function postFamiliarRender( * entityFamiliar: EntityFamiliar, * renderOffset: Vector, * ): void {} * ``` */ POST_FAMILIAR_RENDER = 25, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `FamiliarVariant` provided. * * ```ts * function preFamiliarCollision( * familiar: EntityFamiliar, * collider: Entity, * low: boolean, * ): boolean | undefined {} * ``` */ PRE_FAMILIAR_COLLISION = 26, /** * Unlike in Afterbirth+, in Repentance this callback properly populates the following fields: * * - `Position` * - `SpawnerEntity` * - `SpawnerType` * - `SpawnerVariant` * - `Velocity` * * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `EntityType` provided. * * ```ts * function postNPCInit(npc: EntityNPC): void {} * ``` */ POST_NPC_INIT = 27, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `EntityType` provided. * * ```ts * function postNPCRender(npc: EntityNPC, renderOffset: Vector): void {} * ``` */ POST_NPC_RENDER = 28, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `EntityType` provided. * * ```ts * function postNPCDeath(npc: EntityNPC): void {} * ``` */ POST_NPC_DEATH = 29, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `EntityType` provided. * * ```ts * function preNPCCollision( * npc: EntityNPC, * collider: Entity, * low: boolean, * ): boolean | undefined {} * ``` */ PRE_NPC_COLLISION = 30, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `PlayerVariant` provided. * * ```ts * function postPlayerUpdate(player: EntityPlayer): void {} * ``` * * @deprecated Consider using the `ModCallbackCustom.POST_PLAYER_UPDATE_REORDERED` callback from * `isaacscript-common` instead, since it will fire in the correct order and prevent * bugs relating to data structures not being properly initialized. */ POST_PLAYER_UPDATE = 31, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `PlayerVariant` provided. * * ```ts * function postPlayerRender(player: EntityPlayer, renderOffset: Vector): void {} * ``` * * @deprecated Consider using the `ModCallbackCustom.POST_PLAYER_RENDER_REORDERED` callback from * `isaacscript-common` instead, since it will fire in the correct order and prevent * bugs relating to data structures not being properly initialized. */ POST_PLAYER_RENDER = 32, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `PlayerVariant` provided. * * ```ts * function prePlayerCollision( * player: EntityPlayer, * collider: Entity, * low: boolean, * ): boolean | undefined {} * ``` */ PRE_PLAYER_COLLISION = 33, /** * Unlike in Afterbirth+, in Repentance this callback properly populates the following fields: * * - `Position` * - `SpawnerEntity` * - `SpawnerType` * - `SpawnerVariant` * - `Velocity` * * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `PickupVariant` provided. * * ```ts * function postPickupInit(pickup: EntityPickup): void {} * ``` */ POST_PICKUP_INIT = 34, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `PickupVariant` provided. * * ```ts * function postPickupUpdate(pickup: EntityPickup): void {} * ``` */ POST_PICKUP_UPDATE = 35, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `PickupVariant` provided. * * ```ts * function postPickupRender(pickup: EntityPickup, renderOffset: Vector): void {} * ``` */ POST_PICKUP_RENDER = 36, /** * You cannot filter this callback. * * ```ts * function postPickupSelection( * pickup: EntityPickup, * variant: PickupVariant, * subType: int, * ): [pickupVariant: PickupVariant, subType: int] | undefined {} * ``` */ POST_PICKUP_SELECTION = 37, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `PickupVariant` provided. * * ```ts * function prePickupCollision( * pickup: EntityPickup, * collider: Entity, * low: boolean, * ): boolean | undefined {} * ``` */ PRE_PICKUP_COLLISION = 38, /** * Unlike in Afterbirth+, in Repentance this callback properly populates the following fields: * * - `Position` * - `SpawnerEntity` * - `SpawnerType` * - `SpawnerVariant` * - `Velocity` * * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `TearVariant` provided. * * ```ts * function postTearInit(tear: EntityTear): void {} * ``` */ POST_TEAR_INIT = 39, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `TearVariant` provided. * * ```ts * function postTearUpdate(tear: EntityTear): void {} * ``` */ POST_TEAR_UPDATE = 40, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `TearVariant` provided. * * ```ts * function postTearRender(tear: EntityTear, renderOffset: Vector): void {} * ``` */ POST_TEAR_RENDER = 41, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `TearVariant` provided. * * ```ts * function preTearCollision( * tear: EntityTear, * collider: Entity, * low: boolean, * ): boolean | undefined {} * ``` */ PRE_TEAR_COLLISION = 42, /** * Unlike in Afterbirth+, in Repentance this callback properly populates the following fields: * * - `Position` * - `SpawnerEntity` * - `SpawnerType` * - `SpawnerVariant` * - `Velocity` * * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `ProjectileVariant` provided. * * ```ts * function postProjectileInit(projectile: EntityProjectile): void {} * ``` */ POST_PROJECTILE_INIT = 43, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `ProjectileVariant` provided. * * ```ts * function postProjectileUpdate(projectile: EntityProjectile): void {} * ``` */ POST_PROJECTILE_UPDATE = 44, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `ProjectileVariant` provided. * * ```ts * function postProjectileRender( * projectile: EntityProjectile, * renderOffset: Vector, * ): void {} * ``` */ POST_PROJECTILE_RENDER = 45, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `ProjectileVariant` provided. * * ```ts * function preProjectileCollision( * projectile: EntityProjectile, * collider: Entity, * low: boolean, * ): boolean | undefined {} * ``` */ PRE_PROJECTILE_COLLISION = 46, /** * Unlike in Afterbirth+, in Repentance this callback properly populates the following fields: * * - `Position` * - `SpawnerEntity` * - `SpawnerType` * - `SpawnerVariant` * - `Velocity` * * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `LaserVariant` provided. * * ```ts * function postLaserInit(laser: EntityLaser): void {} * ``` */ POST_LASER_INIT = 47, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `LaserVariant` provided. * * ```ts * function postLaserUpdate(laser: EntityLaser): void {} * ``` */ POST_LASER_UPDATE = 48, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `LaserVariant` provided. * * ```ts * function postLaserRender(laser: EntityLaser, renderOffset: Vector): void {} * ``` */ POST_LASER_RENDER = 49, /** * Unlike in Afterbirth+, in Repentance this callback properly populates the following fields: * * - `Position` * - `SpawnerEntity` * - `SpawnerType` * - `SpawnerVariant` * - `Velocity` * * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the sub-type provided. (This is bugged and is NOT the `KnifeVariant` like you would * expect!) * * ```ts * function postKnifeInit(knife: EntityKnife): void {} * ``` */ POST_KNIFE_INIT = 50, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the sub-type provided. (This is bugged and is NOT the `KnifeVariant` like you would * expect!) * * ```ts * function postKnifeUpdate(knife: EntityKnife): void {} * ``` */ POST_KNIFE_UPDATE = 51, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the sub-type provided. (This is bugged and is NOT the `KnifeVariant` like you would * expect!) * * ```ts * function postKnifeRender(knife: EntityKnife, renderOffset: Vector): void {} * ``` */ POST_KNIFE_RENDER = 52, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the sub-type provided. (This is bugged and is NOT the `KnifeVariant` like you would * expect!) * * ```ts * function preKnifeCollision( * knife: EntityKnife, * collider: Entity, * low: boolean, * ): boolean | undefined {} * ``` */ PRE_KNIFE_COLLISION = 53, /** * Unlike in Afterbirth+, in Repentance this callback properly populates the following fields: * * - `Position` * - `SpawnerEntity` * - `SpawnerType` * - `SpawnerVariant` * - `Velocity` * * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `EffectVariant` provided. * * ```ts * function postEffectInit(effect: EntityEffect): void {} * ``` */ POST_EFFECT_INIT = 54, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `EffectVariant` provided. * * ```ts * function postEffectUpdate(effect: EntityEffect): void {} * ``` */ POST_EFFECT_UPDATE = 55, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `EffectVariant` provided. * * ```ts * function postEffectRender(effect: EntityEffect, renderOffset: Vector): void {} * ``` */ POST_EFFECT_RENDER = 56, /** * Unlike in Afterbirth+, in Repentance this callback properly populates the following fields: * * - `Position` * - `SpawnerEntity` * - `SpawnerType` * - `SpawnerVariant` * - `Velocity` * * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `BombVariant` provided. * * ```ts * function postBombInit(bomb: EntityBomb): void {} * ``` */ POST_BOMB_INIT = 57, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `BombVariant` provided. * * ```ts * function postBombUpdate(bomb: EntityBomb): void {} * ``` */ POST_BOMB_UPDATE = 58, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `BombVariant` provided. * * ```ts * function postBombRender(bomb: EntityBomb, renderOffset: Vector): void {} * ``` */ POST_BOMB_RENDER = 59, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `BombVariant` provided. * * ```ts * function preBombCollision( * bomb: EntityBomb, * collider: Entity, * low: boolean, * ): boolean | undefined {} * ``` */ PRE_BOMB_COLLISION = 60, /** * You cannot filter this callback. * * ```ts * function postFireTear(tear: EntityTear): void {} * ``` */ POST_FIRE_TEAR = 61, /** * You cannot filter this callback. * * ```ts * function preGetCollectible( * itemPoolType: ItemPoolType, * decrease: boolean, * seed: Seed, * ): CollectibleType | undefined {} * ``` */ PRE_GET_COLLECTIBLE = 62, /** * You cannot filter this callback. * * ```ts * function postGetCollectible( * collectibleType: CollectibleType, * itemPoolType: ItemPoolType, * decrease: boolean, * seed: Seed, * ): CollectibleType | undefined {} * ``` */ POST_GET_COLLECTIBLE = 63, /** * You cannot filter this callback. * * ```ts * function getPillColor(seed: Seed): PillColor | undefined {} * ``` */ GET_PILL_COLOR = 64, /** * You cannot filter this callback. * * ```ts * function getPillEffect( * pillEffect: PillEffect, * pillColor: PillColor, * ): PillEffect | undefined {} * ``` */ GET_PILL_EFFECT = 65, /** * You cannot filter this callback. * * ```ts * function getTrinket( * trinketType: TrinketType, * rng: RNG, * ): TrinketType | undefined {} * ``` */ GET_TRINKET = 66, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `EntityType` provided. * * ```ts * function postEntityRemove(entity: Entity): void {} * ``` */ POST_ENTITY_REMOVE = 67, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `EntityType` provided. * * ```ts * function postEntityKill(entity: Entity): void {} * ``` */ POST_ENTITY_KILL = 68, /** * When registering this callback with the `Mod.AddCallback` method: * - You can provide an optional third argument that will make the callback only fire if it * matches the `EntityType` provided. * * ```ts * function preNPCUpdate(entity: Entity): boolean | undefined {} * ``` */ PRE_NPC_UPDATE = 69, /** * In vanilla, this is `PRE_SPAWN_CLEAN_AWARD`, which is a typo. * * You cannot filter this callback. * * ```ts * function preSpawnClearAward( * rng: RNG, * spawnPosition: Vector, * ): boolean | undefined {} * ``` */ PRE_SPAWN_CLEAR_AWARD = 70, /** * You can use the `isGridEntityXMLType` helper function to convert the * `entityTypeOrGridEntityXMLType` argument to an `EntityType` or `GridEntityXMLType`, if needed. * * You cannot filter this callback. * * ```ts * function preRoomEntitySpawn( * entityTypeOrGridEntityXMLType: EntityType | GridEntityXMLType, * variant: int, * subType: int, * gridIndex: int, * initSeed: Seed, * ): [type: EntityType | GridEntityXMLType, variant: int, subType: int] | undefined {} * ``` */ PRE_ROOM_ENTITY_SPAWN = 71, /** * You cannot filter this callback. * * ```ts * function preEntityDevolve(entity: Entity): boolean | undefined {} * ``` */ PRE_ENTITY_DEVOLVE = 72, /** * You cannot filter this callback. * * ```ts * function preModUnload(mod: Mod): void {} * ``` */ PRE_MOD_UNLOAD = 73, }