Files
docs/modules/rust/HOOKS.md
wtclaude 4e2c2dc439 docs(modules): mirror the rest of the Oxide ecosystem, and add a machine-readable set
Completes the uMod mirror beyond the Rust hook table, and adds agent/ — the
same facts in TSV/JSONL at ~46% of the tokens.

New prose:
- OXIDE_API.md: the 19 developer pages under umod.org/documentation/api/ —
  plugin structure, hooks, commands, IPlayer, permissions, config, data files,
  database, localization, timers, web requests, dependencies, integration,
  preprocessor directives, security, style guide, CI, review. This is the
  framework our plugin is a guest in, where HOOKS.md is what the game says.
- OPERATING.md: the 6 operator pages — installing Oxide on a server, then
  installing, configuring and permissioning plugins.

New machine-readable set (agent/):
- hooks.tsv    477 rows, ~31% of HOOKS.md
- items.tsv    678 rows, ~80% of DEFINITIONS.md's item table
- skins.tsv    104 rows covering 2,590 skins, ~77%
- api.jsonl    150 code examples, ~47% of the two prose docs
Generated in the same pass as the markdown, so the two cannot drift.

HOOKS.md gains the universal-hook split: 34 of the 477 are uMod's own
Covalence hooks, raised identically on every game uMod supports. Verified
against /documentation/games/universal in the same capture - all 34 are in
the Rust set and the Rust page adds none of its own, so the overlap is exact.
The distinction is architectural: a universal hook is the portable part of
the surface.

Two things worth recording from building it:
- The first skins.tsv was one row per skin and came out 11% LARGER than the
  markdown it replaces. Grouping it one row per item is what made it a
  saving. The token win is real for prose (3.2x on hooks) and small for
  tables that were already dense - agent/README.md says so plainly rather
  than claiming a flat number.
- Signature extraction by brace depth silently captured body lines (a nested
  '}' in OnUserConnected's example ended the block early). It now matches on
  the hook's own name; all 477 rows verified to carry a real signature.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
2026-09-15 10:01:11 -05:00

9320 lines
251 KiB
Markdown

# Rust Oxide/uMod hook reference
Every hook the uMod Rust game extension raises — **477 hooks across 20 categories** — with its
description, its return contract and the C# signature to declare in a plugin.
> **Scraped verbatim from [`umod.org/documentation/games/rust`](https://umod.org/documentation/games/rust) on 2026-09-15.**
> This is a *mirror for reference*, not a specification we own: uMod is upstream and wins any
> disagreement. See [`README.md`](README.md) for what it is for and how to refresh it.
---
## How to read an entry
Each hook gives three things:
- **What it is called for** — the game moment that raises it.
- **Return behaviour** — the hook's contract, and the only part that is load-bearing. Oxide
reads the value your method returns and one of four things is true:
| Contract | Meaning |
|---|---|
| *No return behavior* | The hook is a **notification**. Return `void`; nothing you return is read. |
| *Returning a non-null value overrides default behavior* | The hook is a **veto with a payload**. Declare it `object`; return `null` to let the game proceed, anything else (conventionally `true`/`false`) to cancel the default action. |
| *Returning true or false overrides default behavior* | A **veto**. Declare it `object`; return `null` to abstain — returning `false` is *not* the same as abstaining. |
| *Returning a string will kick…* (and similar) | The returned value is **consumed as data**, not just as a veto. |
- **Signature** — the exact method to declare. Oxide binds hooks **by name and arity**, by
reflection, at runtime: there is no interface to implement and no compile-time check. A typo in
the name, or the wrong parameter types, means the method is silently never called.
> **Two cautions that apply to the whole table.** (1) Never return a non-`null` value from a hook
> whose contract is *no return behavior* — on some hooks Oxide will still treat it as a veto.
> (2) When several plugins hook the same veto, **the first non-`null` return wins** and the
> remaining plugins are not consulted; abstain with `null` unless you mean to decide.
---
<a id="universal-hooks"></a>
## Universal hooks
**34 of the 477 hooks below are not Rust's** — they are uMod's own *universal* (Covalence) hooks,
which uMod raises identically on every game it supports. They are listed on the Rust page because
they fire on Rust too, and every one of them is reproduced here. The distinction matters to us:
**a universal hook is the portable part of the surface** — code written against it would carry to
any other uMod-supported game, where a Rust-specific hook would not.
They are marked **U** in the alphabetical index. The full set:
- **Player** — [`CanUserLogin`](#canuserlogin), [`OnUserApproved`](#onuserapproved), [`OnUserBanned`](#onuserbanned), [`OnUserChat`](#onuserchat), [`OnUserCommand`](#onusercommand), [`OnUserConnected`](#onuserconnected), [`OnUserDisconnected`](#onuserdisconnected), [`OnUserGroupAdded`](#onusergroupadded), [`OnUserGroupRemoved`](#onusergroupremoved), [`OnUserKicked`](#onuserkicked), [`OnUserNameUpdated`](#onusernameupdated), [`OnUserPermissionGranted`](#onuserpermissiongranted), [`OnUserPermissionRevoked`](#onuserpermissionrevoked), [`OnUserRespawn`](#onuserrespawn), [`OnUserRespawned`](#onuserrespawned), [`OnUserUnbanned`](#onuserunbanned)
- **Server** — [`Init`](#init), [`OnFrame`](#onframe), [`OnPluginLoaded`](#onpluginloaded), [`OnPluginUnloaded`](#onpluginunloaded), [`OnServerInitialized`](#onserverinitialized), [`OnServerSave`](#onserversave)
- **Plugin** — [`LoadDefaultConfig`](#loaddefaultconfig), [`LoadDefaultMessages`](#loaddefaultmessages), [`Loaded`](#loaded), [`Unload`](#unload)
- **Permission** — [`OnGroupCreated`](#ongroupcreated), [`OnGroupDeleted`](#ongroupdeleted), [`OnGroupParentSet`](#ongroupparentset), [`OnGroupPermissionGranted`](#ongrouppermissiongranted), [`OnGroupPermissionRevoked`](#ongrouppermissionrevoked), [`OnGroupRankSet`](#ongrouprankset), [`OnGroupTitleSet`](#ongrouptitleset), [`OnPermissionRegistered`](#onpermissionregistered)
> Source: <https://umod.org/documentation/games/universal>. Verified against that page on the
> same capture — all 34 appear in the Rust set, and the Rust page adds no universal hook of its
> own, so this list is exactly the intersection.
---
## Categories
| Category | Hooks | What it covers |
|---|---:|---|
| [Server](#server-hooks) | 17 | Process lifecycle, the tick/frame loop, save and restart, RCON and console commands. |
| [Player](#player-hooks) | 138 | Everything a connected human does: connect, chat, command, craft, loot, build, die, respawn. The largest surface alongside Entity. |
| [Entity](#entity-hooks) | 140 | The generic `BaseEntity` graph — spawn, kill, damage, mount, loot, flags. Anything in the world that is not specifically an item. |
| [Item](#item-hooks) | 43 | Item stacks and containers: add, remove, split, stack, move, repair, research, craft, use. |
| [Resource](#resource-hooks) | 12 | Gathering and node dispensers — ore, trees, corpses, collectibles, quarries. |
| [Structure](#structure-hooks) | 15 | Building blocks: placement, upgrade, demolish, rotate, stability, doors and locks. |
| [Terrain](#terrain-hooks) | 1 | Terrain/map topology. |
| [Vending](#vending-hooks) | 16 | Vending machines and the shop/trade flow, including the marketplace and drone deliveries. |
| [Weapon](#weapon-hooks) | 16 | Firing, reloading, throwing, melee swings, projectile and trap behaviour. |
| [Vehicle](#vehicle-hooks) | 22 | Boats, cars, horses, helicopters, trains, submarines — fuel, engines, mounting, pushing. |
| [Team](#team-hooks) | 12 | Rust's built-in team/party system: create, invite, join, leave, promote, disband. |
| [World](#world-hooks) | 1 | World-level generation events. |
| [Fishing](#fishing-hooks) | 4 | The fishing minigame. |
| [Electronic](#electronic-hooks) | 2 | The electricity graph. |
| [Clan](#clan-hooks) | 7 | The first-party clan system (distinct from Team). |
| [Plugin](#plugin-hooks) | 4 | Plugin lifecycle inside Oxide itself — `Loaded`, `Unload`, and compilation. |
| [Sign](#sign-hooks) | 3 | Sign painting, updating and locking. |
| [TechTree](#techtree-hooks) | 4 | Tech tree node unlocks and their prerequisites. |
| [Phone](#phone-hooks) | 12 | In-game telephones: dialling, answering, voicemail, directory. |
| [Permission](#permission-hooks) | 8 | uMod's own permission/group system (Covalence) — grants, revokes, group membership. |
| **Total** | **477** | |
---
## Alphabetical index
**U** marks one of the **34 universal hooks** — see [Universal hooks](#universal-hooks) below.
| Hook | Category | U | Returns |
|---|---|:-:|---|
| [`CanAcceptItem`](#canacceptitem) | Item | | Returning CanAcceptResult value overrides default behavior |
| [`CanAdministerVending`](#canadministervending) | Vending | | Returning true or false overrides default behavior |
| [`CanAffordToPlace`](#canaffordtoplace) | Player | | Returning true or false overrides default behavior |
| [`CanAffordUpgrade`](#canaffordupgrade) | Player | | Returning true or false overrides default behavior |
| [`CanAssignBed`](#canassignbed) | Player | | Returning a non-null value overrides default behavior |
| [`CanBeTargeted`](#canbetargeted) | Player | | Returning true or false overrides default behavior |
| [`CanBeWounded`](#canbewounded) | Player | | Returning true or false overrides default behavior |
| [`CanBradleyApcTarget`](#canbradleyapctarget) | Entity | | Returning true or false overrides default behavior |
| [`CanBuild`](#canbuild) | Player | | Returning a non-null value overrides default behavior |
| [`CanBypassQueue`](#canbypassqueue) | Player | | Returning true will bypass the queue, returning nothing will by def… |
| [`CanCatchFish`](#cancatchfish) | Fishing | | Returning true or false overrides default behavior |
| [`CanChangeCode`](#canchangecode) | Player | | Returning a non-null value overrides default behavior |
| [`CanChangeGrade`](#canchangegrade) | Player | | Returning true or false overrides default behavior |
| [`CanCheckFuel`](#cancheckfuel) | Vehicle | | Returning true or false overrides default behavior |
| [`CanClientLogin`](#canclientlogin) | Player | | Returning a string will use the string as the error message |
| [`CanCombineDroppedItem`](#cancombinedroppeditem) | Item | | Returning a non-null value overwrites command arguments |
| [`CanCraft`](#cancraft) | Player | | Returning true or false overrides default behavior |
| [`CanCreateWorldProjectile`](#cancreateworldprojectile) | Weapon | | Returning a non-null value overrides default behavior |
| [`CanDemolish`](#candemolish) | Player | | Returning true or false overrides default behavior |
| [`CanDeployItem`](#candeployitem) | Player | | Returning a non-null value cancels default behavior |
| [`CanDismountEntity`](#candismountentity) | Player | | Returning a non-null value overrides default behavior |
| [`CanDropActiveItem`](#candropactiveitem) | Item | | Returning true or false overrides default behavior |
| [`CanEntityBeHostile`](#canentitybehostile) | Entity | | Returning a non-null value overrides default behavior |
| [`CanEquipItem`](#canequipitem) | Player | | Returning true or false overrides default behavior |
| [`CanExplosiveStick`](#canexplosivestick) | Weapon | | Returning a non-null value overwrites the default behavior |
| [`CanHackCrate`](#canhackcrate) | Player | | Returning a non-null value overrides default behavior |
| [`CanHelicopterDropCrate`](#canhelicopterdropcrate) | Entity | | Returning true or false overrides default behavior |
| [`CanHelicopterStrafe`](#canhelicopterstrafe) | Entity | | Returning true or false overrides default behavior |
| [`CanHelicopterStrafeTarget`](#canhelicopterstrafetarget) | Entity | | Returning true or false overrides default behavior |
| [`CanHelicopterTarget`](#canhelicoptertarget) | Entity | | Returning true or false overrides default behavior |
| [`CanHelicopterUseNapalm`](#canhelicopterusenapalm) | Entity | | Returning true or false overrides default behavior |
| [`CanHideStash`](#canhidestash) | Player | | Returning a non-null value overrides default behavior |
| [`CanLock`](#canlock) | Player | | Returning a non-null value cancels default behavior |
| [`CanLockerAcceptItem`](#canlockeracceptitem) | Entity | | Returning true or false overrides default behavior |
| [`CanLootEntity`](#canlootentity) | Player | | Returning a non-null value overrides default behavior |
| [`CanLootPlayer`](#canlootplayer) | Player | | Returning true or false overrides default behavior |
| [`CanMountEntity`](#canmountentity) | Player | | Returning a non-null value overrides default behavior |
| [`CanMoveItem`](#canmoveitem) | Item | | Returning a non-null value overrides default behavior |
| [`CanNetworkTo`](#cannetworkto) | Entity | | Returning true or false overrides default behavior |
| [`CanNpcAttack`](#cannpcattack) | Entity | | Returning true or false overrides default behavior |
| [`CanNpcEat`](#cannpceat) | Entity | | Returning true or false overrides default behavior |
| [`CanPickupEntity`](#canpickupentity) | Player | | Returning true or false overrides default behavior |
| [`CanPickupLock`](#canpickuplock) | Player | | Returning true or false overrides default behavior |
| [`CanPushBoat`](#canpushboat) | Player | | Returning a non-null value cancels default behavior |
| [`CanReceiveCall`](#canreceivecall) | Phone | | Returning true or false overrides default behavior |
| [`CanRecycle`](#canrecycle) | Entity | | Returning true or false overrides default behavior |
| [`CanRenameBed`](#canrenamebed) | Player | | Returning a non-null value overrides default behavior |
| [`CanResearchItem`](#canresearchitem) | Player | | Returning a non-null value overrides default behavior |
| [`CanSamSiteShoot`](#cansamsiteshoot) | Entity | | Returning a non-null value cancels default behavior |
| [`CanSeeStash`](#canseestash) | Player | | Returning a non-null value overrides default behavior |
| [`CanSetBedPublic`](#cansetbedpublic) | Player | | Returning a non-null value overrides default behavior |
| [`CanSetRelationship`](#cansetrelationship) | Player | | Returning true or false overrides default behavior |
| [`CanSpectateTarget`](#canspectatetarget) | Player | | Returning a non-null value cancels default behavior |
| [`CanStackItem`](#canstackitem) | Item | | Returning true or false overrides default behavior |
| [`CanSwapToSeat`](#canswaptoseat) | Entity | | Returning true or false overrides default behavior |
| [`CanTakeCutting`](#cantakecutting) | Resource | | Returning a non-null value cancels default behavior |
| [`CanUnlock`](#canunlock) | Player | | Returning a non-null value overrides default behavior |
| [`CanUnlockTechTreeNode`](#canunlocktechtreenode) | TechTree | | Returning true or false overrides default behavior |
| [`CanUnlockTechTreeNodePath`](#canunlocktechtreenodepath) | TechTree | | Returning true or false overrides default behavior |
| [`CanUpdateSign`](#canupdatesign) | Player | | Returning true or false overrides default behavior |
| [`CanUseFuel`](#canusefuel) | Vehicle | | Returning true or false overrides default behavior |
| [`CanUseGesture`](#canusegesture) | Player | | Returning true or false overrides default behavior |
| [`CanUseHelicopter`](#canusehelicopter) | Vehicle | | Returning a non-null value cancels default behavior |
| [`CanUseLockedEntity`](#canuselockedentity) | Player | | Returning true or false overrides default behavior |
| [`CanUseMailbox`](#canusemailbox) | Player | | Returning true or false overrides default behavior |
| [`CanUserLogin`](#canuserlogin) | Player | U | Returning a string will kick the user with this reason. Returning a… |
| [`CanUseUI`](#canuseui) | Player | | Returning a non-null value overrides default behavior |
| [`CanUseVending`](#canusevending) | Vending | | Returning true or false overrides default behavior |
| [`CanUseWires`](#canusewires) | Player | | Returning a non-null value overrides default behavior |
| [`CanVendingAcceptItem`](#canvendingacceptitem) | Vending | | Returning true or false overrides default behavior |
| [`CanWearItem`](#canwearitem) | Player | | Returning a non-null value overrides default behavior |
| [`Init`](#init) | Server | U | — |
| [`LoadDefaultConfig`](#loaddefaultconfig) | Plugin | U | — |
| [`LoadDefaultMessages`](#loaddefaultmessages) | Plugin | U | — |
| [`Loaded`](#loaded) | Plugin | U | — |
| [`OnActiveItemChange`](#onactiveitemchange) | Player | | Returning a non-null value cancels default behavior |
| [`OnActiveItemChanged`](#onactiveitemchanged) | Player | | — |
| [`OnAddVendingOffer`](#onaddvendingoffer) | Vending | | — |
| [`OnAirdrop`](#onairdrop) | Entity | | — |
| [`OnAmmoSwitch`](#onammoswitch) | Weapon | | Returning a non-null value overrides default behavior |
| [`OnAmmoUnload`](#onammounload) | Weapon | | Returning a non-null value cancels default behavior |
| [`OnAnalysisComplete`](#onanalysiscomplete) | Player | | — |
| [`OnBackpackDrop`](#onbackpackdrop) | Item | | Return non-null to override default behaviour. |
| [`OnBigWheelLoss`](#onbigwheelloss) | Entity | | — |
| [`OnBigWheelWin`](#onbigwheelwin) | Entity | | Returning non-null value overrides default behaviour. |
| [`OnBoatPathGenerate`](#onboatpathgenerate) | Vehicle | | Returning a List<Vector3> overrides default behavior |
| [`OnBonusItemDrop`](#onbonusitemdrop) | Item | | Returning a non-null value overrides default behavior |
| [`OnBonusItemDropped`](#onbonusitemdropped) | Item | | — |
| [`OnBookmarkAdd`](#onbookmarkadd) | Entity | | Returning a non-null value overrides default behavior |
| [`OnBookmarkControl`](#onbookmarkcontrol) | Entity | | Returning a non-null value overrides default behavior |
| [`OnBookmarkControlEnd`](#onbookmarkcontrolend) | Entity | | Returning a non-null value overrides default behavior |
| [`OnBookmarkControlEnded`](#onbookmarkcontrolended) | Entity | | — |
| [`OnBookmarkControlStarted`](#onbookmarkcontrolstarted) | Entity | | — |
| [`OnBookmarkDelete`](#onbookmarkdelete) | Entity | | Returning a non-null value overrides default behavior |
| [`OnBookmarkInput`](#onbookmarkinput) | Entity | | Returning a non-null value overrides default behavior |
| [`OnBookmarksSendControl`](#onbookmarkssendcontrol) | Entity | | Returning a non-null value overrides default behavior |
| [`OnBradleyApcHunt`](#onbradleyapchunt) | Entity | | Returning a non-null value overrides default behavior |
| [`OnBradleyApcInitialize`](#onbradleyapcinitialize) | Entity | | Returning a non-null value overrides default behavior |
| [`OnBradleyApcPatrol`](#onbradleyapcpatrol) | Entity | | Returning a non-null value overrides default behavior |
| [`OnBroadcastCommand`](#onbroadcastcommand) | Player | | Returning a non-null value overwrites command arguments |
| [`OnBuildingPrivilege`](#onbuildingprivilege) | Entity | | Returning BuildingPrivlidge value overrides default behavior |
| [`OnBuildingSplit`](#onbuildingsplit) | Structure | | — |
| [`OnButtonPress`](#onbuttonpress) | Entity | | Returning a non-null value cancels default behavior |
| [`OnBuyVendingItem`](#onbuyvendingitem) | Vending | | Returning a non-null value overrides default behavior |
| [`OnCardSwipe`](#oncardswipe) | Item | | Returning a non-null value cancels default behavior |
| [`OnCargoPlaneSignaled`](#oncargoplanesignaled) | Entity | | — |
| [`OnCCTVDirectionChange`](#oncctvdirectionchange) | Entity | | Returning a non-null value cancels default behavior |
| [`OnCentralizedBanCheck`](#oncentralizedbancheck) | Player | | Returning a non-null value cancels default behavior |
| [`OnClanColorChanged`](#onclancolorchanged) | Clan | | — |
| [`OnClanCreated`](#onclancreated) | Clan | | — |
| [`OnClanDisbanded`](#onclandisbanded) | Clan | | — |
| [`OnClanLogoChanged`](#onclanlogochanged) | Clan | | — |
| [`OnClanMemberAdded`](#onclanmemberadded) | Clan | | — |
| [`OnClanMemberKicked`](#onclanmemberkicked) | Clan | | — |
| [`OnClanMemberLeft`](#onclanmemberleft) | Clan | | — |
| [`OnClientAuth`](#onclientauth) | Player | | — |
| [`OnClientCommand`](#onclientcommand) | Player | | Returning a non-null value overrides default behavior |
| [`OnCodeEntered`](#oncodeentered) | Structure | | Returning a non-null value overrides default behavior |
| [`OnCollectiblePickup`](#oncollectiblepickup) | Resource | | Returning a non-null value overrides default behavior |
| [`OnConstructionPlace`](#onconstructionplace) | Structure | | Returning a non-null value overrides default behavior |
| [`OnContainerDropItems`](#oncontainerdropitems) | Entity | | Returning a non-null value overrides default behavior |
| [`OnCorpsePopulate`](#oncorpsepopulate) | Player | | Returning a BaseCorpse overrides default behavior |
| [`OnCounterModeToggle`](#oncountermodetoggle) | Entity | | Returning a non-null value overrides default behavior |
| [`OnCounterTargetChange`](#oncountertargetchange) | Entity | | Returning a non-null value overrides default behavior |
| [`OnCrateDropped`](#oncratedropped) | Entity | | — |
| [`OnCrateHack`](#oncratehack) | Entity | | — |
| [`OnCrateHackEnd`](#oncratehackend) | Entity | | — |
| [`OnCrateLanded`](#oncratelanded) | Entity | | — |
| [`OnCupboardAuthorize`](#oncupboardauthorize) | Structure | | Returning a non-null value overrides default behavior |
| [`OnCupboardClearList`](#oncupboardclearlist) | Structure | | Returning a non-null value overrides default behavior |
| [`OnCupboardDeauthorize`](#oncupboarddeauthorize) | Structure | | Returning a non-null value overrides default behavior |
| [`OnDefaultItemsReceive`](#ondefaultitemsreceive) | Player | | Returning a non-null value overrides default behavior |
| [`OnDefaultItemsReceived`](#ondefaultitemsreceived) | Player | | Returning a non-null value overrides default behavior |
| [`OnDeleteVendingOffer`](#ondeletevendingoffer) | Vending | | — |
| [`OnDemoRecordingStart`](#ondemorecordingstart) | Player | | Returning a non-null value overrides default behavior |
| [`OnDemoRecordingStarted`](#ondemorecordingstarted) | Player | | — |
| [`OnDemoRecordingStop`](#ondemorecordingstop) | Player | | Returning a non-null value overrides default behavior |
| [`OnDemoRecordingStopped`](#ondemorecordingstopped) | Player | | — |
| [`OnDestroyUI`](#ondestroyui) | Player | | — |
| [`OnDieselEngineToggle`](#ondieselenginetoggle) | Entity | | Returning a non-null value cancels default behavior |
| [`OnDieselEngineToggled`](#ondieselenginetoggled) | Entity | | — |
| [`OnDispenserBonus`](#ondispenserbonus) | Resource | | Returning an Item replaces the existing Item |
| [`OnDispenserGather`](#ondispensergather) | Resource | | Returning a non-null value overrides default behavior |
| [`OnDoorClosed`](#ondoorclosed) | Structure | | — |
| [`OnDoorKnocked`](#ondoorknocked) | Structure | | — |
| [`OnDoorOpened`](#ondooropened) | Structure | | — |
| [`OnElevatorButtonPress`](#onelevatorbuttonpress) | Entity | | Returning a non-null value overrides default behavior |
| [`OnElevatorCall`](#onelevatorcall) | Entity | | Returning a non-null value overrides default behavior |
| [`OnElevatorMove`](#onelevatormove) | Entity | | Returning a non-null value overrides default behavior |
| [`OnEngineLoadoutRefresh`](#onengineloadoutrefresh) | Entity | | Returning a non-null value overrides default behaviour |
| [`OnEngineStart`](#onenginestart) | Vehicle | | Returning a non-null value overrides default behavior |
| [`OnEngineStarted`](#onenginestarted) | Vehicle | | — |
| [`OnEngineStatsRefresh`](#onenginestatsrefresh) | Vehicle | | Returning a non-null value overrides default behavior |
| [`OnEngineStatsRefreshed`](#onenginestatsrefreshed) | Vehicle | | — |
| [`OnEngineStop`](#onenginestop) | Vehicle | | Returning a non-null value overrides default behavior |
| [`OnEngineStopped`](#onenginestopped) | Vehicle | | — |
| [`OnEntityBuilt`](#onentitybuilt) | Structure | | — |
| [`OnEntityControl`](#onentitycontrol) | Entity | | Returning true or false overrides default behavior |
| [`OnEntityDeath`](#onentitydeath) | Entity | | — |
| [`OnEntityDestroy`](#onentitydestroy) | Entity | | Returning a non-null value overrides default behavior |
| [`OnEntityDismounted`](#onentitydismounted) | Entity | | — |
| [`OnEntityEnter`](#onentityenter) | Entity | | — |
| [`OnEntityFlagsNetworkUpdate`](#onentityflagsnetworkupdate) | Entity | | Returning a non-null value overrides default behavior |
| [`OnEntityGroundMissing`](#onentitygroundmissing) | Entity | | Returning a non-null value overrides default behavior |
| [`OnEntityKill`](#onentitykill) | Entity | | Returning a non-null value overrides default behavior |
| [`OnEntityLeave`](#onentityleave) | Entity | | — |
| [`OnEntityMarkHostile`](#onentitymarkhostile) | Entity | | Returning a non-null value cancels default behavior |
| [`OnEntityMounted`](#onentitymounted) | Entity | | — |
| [`OnEntitySaved`](#onentitysaved) | Entity | | — |
| [`OnEntitySnapshot`](#onentitysnapshot) | Entity | | Returning a non-null value overrides default behavior |
| [`OnEntitySpawned`](#onentityspawned) | Entity | | — |
| [`OnEntityStabilityCheck`](#onentitystabilitycheck) | Entity | | Returning a non-null value cancels default behavior |
| [`OnEntityTakeDamage`](#onentitytakedamage) | Entity | | |
| [`OnExcavatorGather`](#onexcavatorgather) | Entity | | Returning a non-null value cancels default behavior |
| [`OnExcavatorMiningToggled`](#onexcavatorminingtoggled) | Entity | | — |
| [`OnExcavatorResourceSet`](#onexcavatorresourceset) | Entity | | Returning a non-null value cancels default behavior |
| [`OnExcavatorSuppliesRequest`](#onexcavatorsuppliesrequest) | Electronic | | Returning non-null overrides default behaviour. |
| [`OnExcavatorSuppliesRequested`](#onexcavatorsuppliesrequested) | Electronic | | |
| [`OnExperimentEnd`](#onexperimentend) | Player | | Returning a non-null value overrides defualt behaviour. |
| [`OnExperimentEnded`](#onexperimentended) | Player | | — |
| [`OnExperimentStart`](#onexperimentstart) | Player | | Returning a non-null value overrides default behavior |
| [`OnExperimentStarted`](#onexperimentstarted) | Player | | — |
| [`OnExplosiveDropped`](#onexplosivedropped) | Weapon | | — |
| [`OnExplosiveDud`](#onexplosivedud) | Weapon | | Returning a non-null value cancels default behavior |
| [`OnExplosiveFuseSet`](#onexplosivefuseset) | Weapon | | Returning a non-null value overwrites fuse length |
| [`OnExplosiveThrown`](#onexplosivethrown) | Weapon | | — |
| [`OnFindBurnable`](#onfindburnable) | Item | | Returning an Item overrides default behavior |
| [`OnFindSpawnPoint`](#onfindspawnpoint) | Player | | Return a BasePlayer.SpawnPoint object to use that spawnpoint |
| [`OnFireBallDamage`](#onfireballdamage) | Entity | | — |
| [`OnFireBallSpread`](#onfireballspread) | Entity | | — |
| [`OnFishCatch`](#onfishcatch) | Fishing | | Returning a non-null value overrides default behavior |
| [`OnFishCaught`](#onfishcaught) | Fishing | | — |
| [`OnFishingStopped`](#onfishingstopped) | Fishing | | — |
| [`OnFlameExplosion`](#onflameexplosion) | Entity | | — |
| [`OnFlameThrowerBurn`](#onflamethrowerburn) | Weapon | | — |
| [`OnFrame`](#onframe) | Server | U | — |
| [`OnFuelAmountCheck`](#onfuelamountcheck) | Vehicle | | Returning a numeric value (int) overrides the default value |
| [`OnFuelCheck`](#onfuelcheck) | Vehicle | | Returning true or false overrides default behavior |
| [`OnFuelConsume`](#onfuelconsume) | Item | | Returning a non-null value overrides default behavior |
| [`OnFuelConsumed`](#onfuelconsumed) | Item | | — |
| [`OnFuelItemCheck`](#onfuelitemcheck) | Vehicle | | Returning an Item overrides default behavior |
| [`OnGiveSoldItem`](#ongivesolditem) | Vending | | Returning a non-null value cancels default behavior |
| [`OnGroupCreated`](#ongroupcreated) | Permission | U | — |
| [`OnGroupDeleted`](#ongroupdeleted) | Permission | U | — |
| [`OnGroupParentSet`](#ongroupparentset) | Permission | U | — |
| [`OnGroupPermissionGranted`](#ongrouppermissiongranted) | Permission | U | — |
| [`OnGroupPermissionRevoked`](#ongrouppermissionrevoked) | Permission | U | — |
| [`OnGroupRankSet`](#ongrouprankset) | Permission | U | — |
| [`OnGroupTitleSet`](#ongrouptitleset) | Permission | U | — |
| [`OnGrowableGather`](#ongrowablegather) | Resource | | Returning a non-null value overrides default behavior |
| [`OnGrowableGathered`](#ongrowablegathered) | Resource | | — |
| [`OnHammerHit`](#onhammerhit) | Structure | | Returning a non-null value overrides default behavior |
| [`OnHealingItemUse`](#onhealingitemuse) | Item | | Returning a non-null value overrides default behavior |
| [`OnHelicopterAttack`](#onhelicopterattack) | Entity | | Returning a non-null value overrides default behavior |
| [`OnHelicopterDropCrate`](#onhelicopterdropcrate) | Entity | | Returning a non-null value overrides default behavior |
| [`OnHelicopterDropDoorOpen`](#onhelicopterdropdooropen) | Entity | | Returning a non-null value overrides default behavior |
| [`OnHelicopterKilled`](#onhelicopterkilled) | Entity | | Returning a non-null value overrides default behavior |
| [`OnHelicopterOutOfCrates`](#onhelicopteroutofcrates) | Entity | | Returning true or false overrides default behavior |
| [`OnHelicopterRetire`](#onhelicopterretire) | Entity | | Returning a non-null value overrides default behaviour. |
| [`OnHelicopterStrafeEnter`](#onhelicopterstrafeenter) | Entity | | Returning a non-null value cancels default behavior |
| [`OnHelicopterTarget`](#onhelicoptertarget) | Entity | | Returning a non-null value overrides default behavior |
| [`OnHorseHitch`](#onhorsehitch) | Entity | | Returning a non-null value overrides default behavior |
| [`OnHorseLead`](#onhorselead) | Entity | | Returning a non-null value overrides default behavior |
| [`OnHotAirBalloonToggle`](#onhotairballoontoggle) | Vehicle | | Returning a non-null value overrides default behavior |
| [`OnHotAirBalloonToggled`](#onhotairballoontoggled) | Vehicle | | — |
| [`OnIngredientsCollect`](#oningredientscollect) | Item | | Returning a non-null value cancels default behavior |
| [`OnInputUpdate`](#oninputupdate) | Entity | | Returning a non-null value cancels default behavior |
| [`OnInventoryNetworkUpdate`](#oninventorynetworkupdate) | Player | | Returning a non-null value overrides default behavior |
| [`OnIORefCleared`](#oniorefcleared) | Entity | | — |
| [`OnItemAction`](#onitemaction) | Item | | Returning a non-null value overrides default behavior |
| [`OnItemAddedToContainer`](#onitemaddedtocontainer) | Item | | — |
| [`OnItemCraft`](#onitemcraft) | Item | | Returning true or false overrides default behavior |
| [`OnItemCraftCancelled`](#onitemcraftcancelled) | Item | | — |
| [`OnItemCraftFinished`](#onitemcraftfinished) | Item | | — |
| [`OnItemDeployed`](#onitemdeployed) | Item | | — |
| [`OnItemDropped`](#onitemdropped) | Item | | — |
| [`OnItemLock`](#onitemlock) | Item | | Returning a non-null value overrides default behavior |
| [`OnItemPickup`](#onitempickup) | Item | | Returning a non-null value overrides default behavior |
| [`OnItemRecycle`](#onitemrecycle) | Entity | | Returning a non-null value overrides default behavior |
| [`OnItemRefill`](#onitemrefill) | Item | | Returning a non-null value overrides default behavior |
| [`OnItemRemove`](#onitemremove) | Item | | Return a non-null value stop item from being destroyed |
| [`OnItemRemovedFromContainer`](#onitemremovedfromcontainer) | Item | | — |
| [`OnItemRepair`](#onitemrepair) | Item | | Returning a non-null value overrides default behavior |
| [`OnItemResearch`](#onitemresearch) | Item | | — |
| [`OnItemResearched`](#onitemresearched) | Item | | Returning a float will affect if researching is successful or not |
| [`OnItemSplit`](#onitemsplit) | Item | | Returning an Item overrides default behavior |
| [`OnItemStacked`](#onitemstacked) | Item | | — |
| [`OnItemSubmit`](#onitemsubmit) | Item | | Returning a non-null value cancels default behavior |
| [`OnItemUnlock`](#onitemunlock) | Item | | Returning a non-null value overrides default behavior |
| [`OnItemUpgrade`](#onitemupgrade) | Item | | — |
| [`OnItemUse`](#onitemuse) | Item | | Returning an int overrides the amount consumed. |
| [`OnLiftUse`](#onliftuse) | Entity | | Returning a non-null value overrides default behavior |
| [`OnLiquidVesselFill`](#onliquidvesselfill) | Entity | | Returning a non-null value cancels default behavior |
| [`OnLockerSwap`](#onlockerswap) | Entity | | Returning non-null value overrides default behavior |
| [`OnLootEntity`](#onlootentity) | Player | | — |
| [`OnLootEntityEnd`](#onlootentityend) | Player | | — |
| [`OnLootItem`](#onlootitem) | Player | | — |
| [`OnLootNetworkUpdate`](#onlootnetworkupdate) | Player | | Returning a non-null value overrides default behavior |
| [`OnLootPlayer`](#onlootplayer) | Player | | — |
| [`OnLootSpawn`](#onlootspawn) | Entity | | Returning a non-null value overrides default behavior |
| [`OnLoseCondition`](#onlosecondition) | Item | | — |
| [`OnMagazineReload`](#onmagazinereload) | Weapon | | Returning a non-null value overrides default behavior |
| [`OnMapImageUpdated`](#onmapimageupdated) | Item | | — |
| [`OnMapMarkerAdd`](#onmapmarkeradd) | Player | | Returning a non-null value cancels default behavior |
| [`OnMapMarkerAdded`](#onmapmarkeradded) | Player | | — |
| [`OnMapMarkerRemove`](#onmapmarkerremove) | Player | | Returning a non-null value cancels default behaviour |
| [`OnMapMarkersClear`](#onmapmarkersclear) | Player | | Returning a non-null value cancels default behavior |
| [`OnMapMarkersCleared`](#onmapmarkerscleared) | Player | | — |
| [`OnMaxStackable`](#onmaxstackable) | Item | | Returning a numeric value (int) overrides the default value |
| [`OnMeleeAttack`](#onmeleeattack) | Player | | Returning a non-null value cancels default behavior |
| [`OnMeleeThrown`](#onmeleethrown) | Weapon | | — |
| [`OnMessagePlayer`](#onmessageplayer) | Server | | Returning a non-null value overrides default behavior |
| [`OnMlrsFire`](#onmlrsfire) | Entity | | Returning a non-null value overrides default behaviour. |
| [`OnMlrsFired`](#onmlrsfired) | Entity | | No return behaviour. |
| [`OnNetworkGroupEntered`](#onnetworkgroupentered) | Player | | — |
| [`OnNetworkGroupLeft`](#onnetworkgroupleft) | Player | | — |
| [`OnNetworkSubscriptionsUpdate`](#onnetworksubscriptionsupdate) | Entity | | Returning a non-null value prevents Rust from applying the proposed… |
| [`OnNewSave`](#onnewsave) | Server | | — |
| [`OnNpcConversationEnded`](#onnpcconversationended) | Player | | — |
| [`OnNpcConversationRespond`](#onnpcconversationrespond) | Player | | Returning a non-null value overrides default behavior |
| [`OnNpcConversationResponded`](#onnpcconversationresponded) | Player | | — |
| [`OnNpcConversationStart`](#onnpcconversationstart) | Player | | Returning a non-null value overrides default behavior |
| [`OnNpcDestinationSet`](#onnpcdestinationset) | Entity | | Returning a non-null value cancels default behavior |
| [`OnNpcGiveSoldItem`](#onnpcgivesolditem) | Vending | | Returning a non-null value overrides default behaviour. |
| [`OnNpcPlayerResume`](#onnpcplayerresume) | Entity | | Returning a non-null value cancels default behavior |
| [`OnNpcStopMoving`](#onnpcstopmoving) | Entity | | Returning a non-null value cancels default behavior |
| [`OnNpcTarget`](#onnpctarget) | Entity | | Returning a non-null value overrides default behavior |
| [`OnNpcTargetSense`](#onnpctargetsense) | Entity | | Returning a non-null value overrides default behavior |
| [`OnOpenVendingAdmin`](#onopenvendingadmin) | Vending | | — |
| [`OnOutputUpdate`](#onoutputupdate) | Entity | | Returning a non-null value cancels default behavior |
| [`OnOvenCook`](#onovencook) | Entity | | Returning a non-null value overrides default behavior |
| [`OnOvenCooked`](#onovencooked) | Entity | | — |
| [`OnOvenToggle`](#onoventoggle) | Entity | | Returning a non-null value overrides default behavior |
| [`OnPayForPlacement`](#onpayforplacement) | Player | | Returning a non-null value cancels default behavior |
| [`OnPayForUpgrade`](#onpayforupgrade) | Player | | Returning a non-null value cancels default behavior |
| [`OnPermissionRegistered`](#onpermissionregistered) | Permission | U | — |
| [`OnPhoneAnswer`](#onphoneanswer) | Phone | | Returning a non-null value overrides default behavior |
| [`OnPhoneAnswered`](#onphoneanswered) | Phone | | — |
| [`OnPhoneCallStart`](#onphonecallstart) | Phone | | Returning a non-null value overrides default behavior |
| [`OnPhoneCallStarted`](#onphonecallstarted) | Phone | | |
| [`OnPhoneDial`](#onphonedial) | Phone | | Returning a non-null value overrides default behavior |
| [`OnPhoneDialFail`](#onphonedialfail) | Phone | | Returning a non-null value overrides default behavior |
| [`OnPhoneDialFailed`](#onphonedialfailed) | Phone | | — |
| [`OnPhoneDialTimedOut`](#onphonedialtimedout) | Phone | | — |
| [`OnPhoneDialTimeout`](#onphonedialtimeout) | Phone | | Returning a non-null value overrides default behavior |
| [`OnPhoneNameUpdate`](#onphonenameupdate) | Phone | | Returning a non-null value overrides default behavior |
| [`OnPhoneNameUpdated`](#onphonenameupdated) | Phone | | — |
| [`OnPlayerAddModifiers`](#onplayeraddmodifiers) | Player | | Returning a non-null value overrides default behavior (prevents the… |
| [`OnPlayerAssist`](#onplayerassist) | Player | | Returning a non-null value cancels default behavior |
| [`OnPlayerAttack`](#onplayerattack) | Player | | Returning a non-null value overrides default behavior |
| [`OnPlayerBanned`](#onplayerbanned) | Player | | — |
| [`OnPlayerChat`](#onplayerchat) | Player | | Returning a non-null value overrides default behavior of chat, not… |
| [`OnPlayerCommand`](#onplayercommand) | Player | | Returning a non-null value overrides default behavior |
| [`OnPlayerConnected`](#onplayerconnected) | Player | | — |
| [`OnPlayerCorpse`](#onplayercorpse) | Player | | — |
| [`OnPlayerCorpseSpawn`](#onplayercorpsespawn) | Player | | Returning a non-null value overrides default behavior |
| [`OnPlayerCorpseSpawned`](#onplayercorpsespawned) | Player | | — |
| [`OnPlayerDeath`](#onplayerdeath) | Player | | Returning a non-null value overrides default behavior |
| [`OnPlayerDisconnected`](#onplayerdisconnected) | Player | | — |
| [`OnPlayerDropActiveItem`](#onplayerdropactiveitem) | Player | | — |
| [`OnPlayerHealthChange`](#onplayerhealthchange) | Player | | Returning a non-null value cancels the health change |
| [`OnPlayerInput`](#onplayerinput) | Player | | — |
| [`OnPlayerKeepAlive`](#onplayerkeepalive) | Player | | Returning a non-null value cancels default behavior |
| [`OnPlayerKicked`](#onplayerkicked) | Player | | — |
| [`OnPlayerLand`](#onplayerland) | Player | | Returning a non-null value overrides default behavior |
| [`OnPlayerLanded`](#onplayerlanded) | Player | | — |
| [`OnPlayerLootEnd`](#onplayerlootend) | Player | | — |
| [`OnPlayerMetabolize`](#onplayermetabolize) | Player | | — |
| [`OnPlayerRecover`](#onplayerrecover) | Player | | Returning a non-null value overrides default behavior |
| [`OnPlayerRecovered`](#onplayerrecovered) | Player | | — |
| [`OnPlayerReported`](#onplayerreported) | Player | | — |
| [`OnPlayerRespawn`](#onplayerrespawn) | Player | | Returning a BasePlayer.SpawnPoint (takes a position and rotation),… |
| [`OnPlayerRespawned`](#onplayerrespawned) | Player | | — |
| [`OnPlayerRevive`](#onplayerrevive) | Player | | Returning a non-null value cancels default behavior |
| [`OnPlayerSetInfo`](#onplayersetinfo) | Player | | — |
| [`OnPlayerSleep`](#onplayersleep) | Player | | Returning a non-null value overrides default behavior |
| [`OnPlayerSleepEnded`](#onplayersleepended) | Player | | — |
| [`OnPlayerSpawn`](#onplayerspawn) | Player | | Returning true overrides default behavior |
| [`OnPlayerSpectate`](#onplayerspectate) | Player | | Returning a non-null value overrides default behavior |
| [`OnPlayerSpectateEnd`](#onplayerspectateend) | Player | | Returning a non-null value stops the spectate from ending |
| [`OnPlayerTick`](#onplayertick) | Player | | Returning a non-null value overrides default behavior |
| [`OnPlayerViolation`](#onplayerviolation) | Player | | Returning a non-null value overrides default behavior |
| [`OnPlayerVoice`](#onplayervoice) | Player | | Returning a non-null value overrides default behavior |
| [`OnPlayerWound`](#onplayerwound) | Player | | Returning a non-null value cancels the wounded state |
| [`OnPluginLoaded`](#onpluginloaded) | Server | U | — |
| [`OnPluginUnloaded`](#onpluginunloaded) | Server | U | — |
| [`OnProjectileRicochet`](#onprojectilericochet) | Weapon | | Returning a non-null value overrides default behavior |
| [`OnQuarryEnabled`](#onquarryenabled) | Resource | | — |
| [`OnQuarryGather`](#onquarrygather) | Resource | | — |
| [`OnQuarryToggled`](#onquarrytoggled) | Resource | | — |
| [`OnRconCommand`](#onrconcommand) | Server | | — |
| [`OnRconConnection`](#onrconconnection) | Server | | Returning a non-null value overrides default behavior |
| [`OnReactiveTargetReset`](#onreactivetargetreset) | Entity | | — |
| [`OnRecyclerToggle`](#onrecyclertoggle) | Entity | | Returning a non-null value overrides default behavior |
| [`OnRefreshVendingStock`](#onrefreshvendingstock) | Vending | | — |
| [`OnRemoveDying`](#onremovedying) | Resource | | Returning a non-null value overrides default behavior |
| [`OnResearchCostDetermine`](#onresearchcostdetermine) | Item | | Returning a numeric value (int) overrides the default value |
| [`OnResourceDepositCreated`](#onresourcedepositcreated) | Entity | | — |
| [`OnRespawnInformationGiven`](#onrespawninformationgiven) | Player | | — |
| [`OnRfBroadcasterAdd`](#onrfbroadcasteradd) | Entity | | Returning a non-null value overrides default behavior |
| [`OnRfBroadcasterAdded`](#onrfbroadcasteradded) | Entity | | — |
| [`OnRfBroadcasterRemove`](#onrfbroadcasterremove) | Entity | | Returning a non-null value overrides default behavior |
| [`OnRfBroadcasterRemoved`](#onrfbroadcasterremoved) | Entity | | — |
| [`OnRfFrequencyChange`](#onrffrequencychange) | Entity | | Returning a non-null value overrides default behavior |
| [`OnRfFrequencyChanged`](#onrffrequencychanged) | Entity | | — |
| [`OnRfListenerAdd`](#onrflisteneradd) | Entity | | Returning a non-null value overrides default behavior |
| [`OnRfListenerAdded`](#onrflisteneradded) | Entity | | — |
| [`OnRfListenerRemove`](#onrflistenerremove) | Entity | | Returning a non-null value overrides default behavior |
| [`OnRfListenerRemoved`](#onrflistenerremoved) | Entity | | — |
| [`OnRidableAnimalClaim`](#onridableanimalclaim) | Entity | | Returning a non-null value overrides default behavior |
| [`OnRidableAnimalClaimed`](#onridableanimalclaimed) | Entity | | — |
| [`OnRocketLaunched`](#onrocketlaunched) | Weapon | | — |
| [`OnRotateVendingMachine`](#onrotatevendingmachine) | Vending | | Returning a non-null value overrides default behavior |
| [`OnRunPlayerMetabolism`](#onrunplayermetabolism) | Player | | Returning a non-null value cancels the update |
| [`OnSamSiteTarget`](#onsamsitetarget) | Entity | | Returning a non-null value cancels default behavior |
| [`OnSaveLoad`](#onsaveload) | Server | | Returning a non-null value overrides default behavior |
| [`OnSendCommand`](#onsendcommand) | Player | | Returning a non-null value overwrites command arguments |
| [`OnServerCommand`](#onservercommand) | Server | | Returning a non-null value overrides default behavior |
| [`OnServerInformationUpdated`](#onserverinformationupdated) | Server | | — |
| [`OnServerInitialized`](#onserverinitialized) | Server | U | — |
| [`OnServerMessage`](#onservermessage) | Server | | Return a non-null value to stop message from being sent |
| [`OnServerRestartInterrupt`](#onserverrestartinterrupt) | Server | | Returning a non-null value overrides default behavior |
| [`OnServerSave`](#onserversave) | Server | U | — |
| [`OnServerShutdown`](#onservershutdown) | Server | | — |
| [`OnShopAcceptClick`](#onshopacceptclick) | Entity | | Returning a non-null value cancels default behavior |
| [`OnShopCancelClick`](#onshopcancelclick) | Entity | | Returning a non-null value cancels default behavior |
| [`OnShopCompleteTrade`](#onshopcompletetrade) | Entity | | Returning a non-null value cancels default behavior |
| [`OnShopCompleteTrade`](#onshopcompletetrade-1) | Entity | | Returning a non-null value overrides default behavior |
| [`OnSignLocked`](#onsignlocked) | Sign | | — |
| [`OnSignUpdated`](#onsignupdated) | Sign | | — |
| [`OnSleepingBagDestroy`](#onsleepingbagdestroy) | Entity | | Returning a non-null value overrides default behavior |
| [`OnSleepingBagDestroyed`](#onsleepingbagdestroyed) | Entity | | — |
| [`OnSleepingBagValidCheck`](#onsleepingbagvalidcheck) | Entity | | Returning true or false overrides default behavior |
| [`OnSolarPanelSunUpdate`](#onsolarpanelsunupdate) | Entity | | Returning a non-null value overrides default behavior |
| [`OnSpinWheel`](#onspinwheel) | Sign | | — |
| [`OnStashExposed`](#onstashexposed) | Player | | — |
| [`OnStashHidden`](#onstashhidden) | Player | | — |
| [`OnStructureDemolish`](#onstructuredemolish) | Structure | | Returning a non-null value overrides default behavior |
| [`OnStructureRepair`](#onstructurerepair) | Structure | | Returning a non-null value cancels repair |
| [`OnStructureRotate`](#onstructurerotate) | Structure | | Returning a non-null value cancels rotate |
| [`OnStructureUpgrade`](#onstructureupgrade) | Structure | | Returning a non-null value overrides default behavior |
| [`OnSupplyDropDropped`](#onsupplydropdropped) | Entity | | — |
| [`OnSupplyDropLanded`](#onsupplydroplanded) | Entity | | — |
| [`OnSurveyGather`](#onsurveygather) | Resource | | — |
| [`OnSwitchToggle`](#onswitchtoggle) | Entity | | Returning a non-null value cancels default behavior |
| [`OnSwitchToggled`](#onswitchtoggled) | Entity | | — |
| [`OnTakeCurrencyItem`](#ontakecurrencyitem) | Vending | | Returning a non-null value cancels default behavior |
| [`OnTeamAcceptInvite`](#onteamacceptinvite) | Team | | Returning a non-null value cancels default behavior |
| [`OnTeamCreate`](#onteamcreate) | Team | | Returning a non-null value cancels default behavior |
| [`OnTeamCreated`](#onteamcreated) | Team | | — |
| [`OnTeamDisband`](#onteamdisband) | Team | | Returning a non-null value cancels default behavior |
| [`OnTeamDisbanded`](#onteamdisbanded) | Team | | — |
| [`OnTeamInvite`](#onteaminvite) | Team | | Returning a non-null value cancels default behavior |
| [`OnTeamKick`](#onteamkick) | Team | | Returning a non-null value cancels default behavior |
| [`OnTeamLeave`](#onteamleave) | Team | | Returning a non-null value cancels default behavior |
| [`OnTeamPromote`](#onteampromote) | Team | | Returning a non-null value cancels default behavior |
| [`OnTeamRejectInvite`](#onteamrejectinvite) | Team | | Returning a non-null value cancels default behavior |
| [`OnTeamUpdate`](#onteamupdate) | Team | | Returning a non-null value cancels default behavior |
| [`OnTeamUpdated`](#onteamupdated) | Team | | Returning a non-null value cancels default behavior |
| [`OnTechTreeNodeUnlock`](#ontechtreenodeunlock) | TechTree | | Returning a non-null value overrides default behavior |
| [`OnTechTreeNodeUnlocked`](#ontechtreenodeunlocked) | TechTree | | — |
| [`OnTerrainInitialized`](#onterraininitialized) | Terrain | | — |
| [`OnThreatLevelUpdate`](#onthreatlevelupdate) | Player | | Returning a non-null value cancels default behavior |
| [`OnTick`](#ontick) | Server | | — |
| [`OnToggleVendingBroadcast`](#ontogglevendingbroadcast) | Vending | | — |
| [`OnTrapArm`](#ontraparm) | Item | | Returning a non-null value overrides default behavior |
| [`OnTrapDisarm`](#ontrapdisarm) | Item | | Returning a non-null value overrides default behavior |
| [`OnTrapSnapped`](#ontrapsnapped) | Item | | — |
| [`OnTrapTrigger`](#ontraptrigger) | Item | | Returning a non-null value overrides default behavior |
| [`OnTreeMarkerHit`](#ontreemarkerhit) | Resource | | Returning true or false overrides default behaviour |
| [`OnTurretAssign`](#onturretassign) | Entity | | Returning a non-null value cancels default behavior |
| [`OnTurretAssigned`](#onturretassigned) | Entity | | — |
| [`OnTurretAuthorize`](#onturretauthorize) | Entity | | Returning a non-null value overrides default behavior |
| [`OnTurretClearList`](#onturretclearlist) | Entity | | Returning a non-null value overrides default behavior |
| [`OnTurretDeauthorize`](#onturretdeauthorize) | Entity | | Returning a non-null value overrides default behavior |
| [`OnTurretModeToggle`](#onturretmodetoggle) | Entity | | — |
| [`OnTurretRotate`](#onturretrotate) | Entity | | Returning a non-null value overrides default behavior |
| [`OnTurretShutdown`](#onturretshutdown) | Entity | | Returning a non-null value overrides default behavior |
| [`OnTurretStartup`](#onturretstartup) | Entity | | Returning a non-null value overrides default behavior |
| [`OnTurretTarget`](#onturrettarget) | Entity | | Returning a non-null value overrides default behavior |
| [`OnTurretToggle`](#onturrettoggle) | Entity | | Returning a non-null value overrides default behavior |
| [`OnUserApprove`](#onuserapprove) | Player | | Returning a non-null value overrides default behavior, plugin shoul… |
| [`OnUserApproved`](#onuserapproved) | Player | U | — |
| [`OnUserBanned`](#onuserbanned) | Player | U | — |
| [`OnUserChat`](#onuserchat) | Player | U | Returning true overrides default behavior of chat, not commands |
| [`OnUserCommand`](#onusercommand) | Player | U | Returning a non-null value overrides default behavior |
| [`OnUserConnected`](#onuserconnected) | Player | U | — |
| [`OnUserDisconnected`](#onuserdisconnected) | Player | U | — |
| [`OnUserGroupAdded`](#onusergroupadded) | Player | U | — |
| [`OnUserGroupRemoved`](#onusergroupremoved) | Player | U | — |
| [`OnUserKicked`](#onuserkicked) | Player | U | — |
| [`OnUserNameUpdated`](#onusernameupdated) | Player | U | — |
| [`OnUserPermissionGranted`](#onuserpermissiongranted) | Player | U | — |
| [`OnUserPermissionRevoked`](#onuserpermissionrevoked) | Player | U | — |
| [`OnUserRespawn`](#onuserrespawn) | Player | U | — |
| [`OnUserRespawned`](#onuserrespawned) | Player | U | — |
| [`OnUserUnbanned`](#onuserunbanned) | Player | U | — |
| [`OnVehicleModuleDeselected`](#onvehiclemoduledeselected) | Vehicle | | — |
| [`OnVehicleModuleMove`](#onvehiclemodulemove) | Vehicle | | Returning a non-null value overrides default behavior |
| [`OnVehicleModulesAssign`](#onvehiclemodulesassign) | Vehicle | | Returning a non-null value overrides default behavior |
| [`OnVehicleModulesAssigned`](#onvehiclemodulesassigned) | Vehicle | | — |
| [`OnVehicleModuleSelect`](#onvehiclemoduleselect) | Vehicle | | Returning a non-null value overrides default behavior |
| [`OnVehicleModuleSelected`](#onvehiclemoduleselected) | Vehicle | | — |
| [`OnVehiclePush`](#onvehiclepush) | Vehicle | | Returning a non-null value overrides default behavior |
| [`OnVendingShopOpened`](#onvendingshopopened) | Vending | | — |
| [`OnVendingShopRename`](#onvendingshoprename) | Vending | | Returning a non-null value cancels default behavior |
| [`OnVendingTransaction`](#onvendingtransaction) | Vending | | Returning true or false overrides default behavior |
| [`OnWaterCollect`](#onwatercollect) | Entity | | Returning a non-null value cancels default behavior |
| [`OnWaterPurified`](#onwaterpurified) | Entity | | — |
| [`OnWaterPurify`](#onwaterpurify) | Entity | | Returning a non-null value cancels default behavior |
| [`OnWeaponFired`](#onweaponfired) | Weapon | | — |
| [`OnWeaponReload`](#onweaponreload) | Weapon | | Returning a non-null value overrides default behavior |
| [`OnWireClear`](#onwireclear) | Entity | | Returning a non-null value cancels default behavior |
| [`OnWireConnect`](#onwireconnect) | Entity | | Returning a non-null value cancels default behavior |
| [`OnWorldPrefabSpawned`](#onworldprefabspawned) | World | | — |
| [`OnWorldProjectileCreate`](#onworldprojectilecreate) | Weapon | | Returning a non-null value overrides default behavior |
| [`Unload`](#unload) | Plugin | U | — |
---
## Server Hooks
*Process lifecycle, the tick/frame loop, save and restart, RCON and console commands.*
17 hooks: [`Init`](#init), [`OnMessagePlayer`](#onmessageplayer), [`OnServerCommand`](#onservercommand), [`OnServerRestartInterrupt`](#onserverrestartinterrupt), [`OnServerShutdown`](#onservershutdown), [`OnFrame`](#onframe), [`OnServerInformationUpdated`](#onserverinformationupdated), [`OnRconCommand`](#onrconcommand), [`OnPluginLoaded`](#onpluginloaded), [`OnRconConnection`](#onrconconnection), [`OnNewSave`](#onnewsave), [`OnPluginUnloaded`](#onpluginunloaded), [`OnSaveLoad`](#onsaveload), [`OnServerInitialized`](#onserverinitialized), [`OnServerMessage`](#onservermessage), [`OnServerSave`](#onserversave), [`OnTick`](#ontick)
<a id="init"></a>
### `Init` · *universal*
- Called when a plugin is being initialized
- Other plugins may or may not be present, dependant on load order
**Returns:** No return behavior
```csharp
void Init()
{
Puts("Init works!");
}
```
<sub>uMod last updated 2018-08-20</sub>
<a id="onmessageplayer"></a>
### `OnMessagePlayer`
- Useful for intercepting server messages before they get to their intended target
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnMessagePlayer(string message, BasePlayer player)
{
Puts("OnMessagePlayer works!");
return null;
}
```
<sub>Tags: `message`, `server` · uMod last updated 2021-05-08</sub>
<a id="onservercommand"></a>
### `OnServerCommand`
- Useful for intercepting commands before they get to their intended target
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnServerCommand(ConsoleSystem.Arg arg)
{
Puts("OnServerCommand works!");
return null;
}
```
<sub>Tags: `server` · uMod last updated 2021-05-08</sub>
<a id="onserverrestartinterrupt"></a>
### `OnServerRestartInterrupt`
- Called when a server restart is being cancelled
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnServerRestartInterrupt()
{
Puts("OnServerRestartInterrupt works!");
return null;
}
```
<sub>Tags: `server` · uMod last updated 2023-04-11</sub>
<a id="onservershutdown"></a>
### `OnServerShutdown`
- Useful for saving something / etc on server shutdown
**Returns:** No return behavior
```csharp
void OnServerShutdown()
{
Puts("OnServerShutdown works!");
}
```
<sub>Tags: `server` · uMod last updated 2021-05-08</sub>
<a id="onframe"></a>
### `OnFrame` · *universal*
- Called each frame
**Returns:** No return behavior
```csharp
void OnFrame()
{
Puts("OnFrame works!");
}
```
<sub>Tags: `frame`, `server` · uMod last updated 2021-05-08</sub>
<a id="onserverinformationupdated"></a>
### `OnServerInformationUpdated`
- Called after all steam information for the server has has been updated
**Returns:** No return behavior
```csharp
void OnServerInformationUpdated()
{
Puts("OnServerInformationUpdated works!");
}
```
<sub>Tags: `server`, `steam` · uMod last updated 2023-04-11</sub>
<a id="onrconcommand"></a>
### `OnRconCommand`
- Called when an RCON command is run
**Returns:** No return behavior
```csharp
void OnRconCommand(IPAddress ip, string command, string[] args)
{
Puts("OnRconCommand works!");
}
```
<sub>Tags: `rcon`, `server` · uMod last updated 2021-05-08</sub>
<a id="onpluginloaded"></a>
### `OnPluginLoaded` · *universal*
- Called when any plugin has been loaded
- Not to be confused with [`Loaded`](#loaded)
**Returns:** No return behavior
```csharp
void OnPluginLoaded(Plugin plugin)
{
Puts($"Plugin '{plugin.Name}' has been loaded");
}
```
<sub>Tags: `plugin`, `server` · uMod last updated 2023-12-25</sub>
<a id="onrconconnection"></a>
### `OnRconConnection`
- Called when a new RCON connection is opened
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnRconConnection(IPAddress ip)
{
Puts("OnRconConnection works!");
return null;
}
```
<sub>Tags: `rcon`, `server` · uMod last updated 2021-05-08</sub>
<a id="onnewsave"></a>
### `OnNewSave`
- Called when a new savefile is created (usually when map has wiped)
**Returns:** No return behavior
```csharp
void OnNewSave(string filename)
{
Puts("OnNewSave works!");
}
```
<sub>Tags: `server` · uMod last updated 2021-05-08</sub>
<a id="onpluginunloaded"></a>
### `OnPluginUnloaded` · *universal*
- Called when any plugin has been unloaded
- Not to be confused with [`Unload`](#unload)
**Returns:** No return behavior
```csharp
void OnPluginUnloaded(Plugin plugin)
{
Puts($"Plugin '{plugin.Name}' has been unloaded");
}
```
<sub>Tags: `plugin`, `server` · uMod last updated 2023-12-25</sub>
<a id="onsaveload"></a>
### `OnSaveLoad`
- Called when a save file is loaded
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnSaveLoad(Dictionary<BaseEntity, ProtoBuf.Entity> entities)
{
Puts("OnSaveLoad works!");
return null;
}
```
<sub>Tags: `save`, `server` · uMod last updated 2021-05-08</sub>
<a id="onserverinitialized"></a>
### `OnServerInitialized` · *universal*
- Called after the server startup has been completed and is awaiting connections
- Also called for plugins that are hotloaded while the server is already started running
- Boolean parameter, false if called on plugin hotload and true if called on server initialization
**Returns:** No return behavior
```csharp
void OnServerInitialized(bool initial)
{
Puts("OnServerInitialized works!");
}
```
<sub>Tags: `server` · uMod last updated 2021-05-08</sub>
<a id="onservermessage"></a>
### `OnServerMessage`
- Called before a SERVER message is sent to a player
**Returns:** Return a non-null value to stop message from being sent
```csharp
// Example that stops message from being sent
object OnServerMessage(string message, string playerName, string color, ulong playerId)
{
if (message.Contains("gave"))
{
Puts($"Message to {playerName} ({playerId}) cancelled");
return false;
}
return null;
}
```
```csharp
// Example that does not stop message from being sent
void OnServerMessage(string message, string playerName, string color, ulong playerId)
{
Puts($"{playerName} ({playerId}) was sent message: {message}");
}
```
<sub>Tags: `server` · uMod last updated 2022-01-28</sub>
<a id="onserversave"></a>
### `OnServerSave` · *universal*
- Called before the server saves
**Returns:** No return behavior
```csharp
void OnServerSave()
{
Puts("OnServerSave works!");
}
```
<sub>Tags: `server` · uMod last updated 2021-05-08</sub>
<a id="ontick"></a>
### `OnTick`
- Called every tick (defined by the tick rate of the server)
- For better performance, avoid using heavy calculations in this hook.
**Returns:** No return behavior
```csharp
void OnTick()
{
Puts("OnTick works!");
}
```
<sub>Tags: `tick`, `server` · uMod last updated 2021-05-08</sub>
---
## Player Hooks
*Everything a connected human does: connect, chat, command, craft, loot, build, die, respawn. The largest surface alongside Entity.*
138 hooks: [`CanAffordToPlace`](#canaffordtoplace), [`CanAffordUpgrade`](#canaffordupgrade), [`CanAssignBed`](#canassignbed), [`CanDeployItem`](#candeployitem), [`CanLock`](#canlock), [`CanPushBoat`](#canpushboat), [`CanSpectateTarget`](#canspectatetarget), [`CanUpdateSign`](#canupdatesign), [`CanUseWires`](#canusewires), [`OnActiveItemChange`](#onactiveitemchange), [`OnActiveItemChanged`](#onactiveitemchanged), [`OnBroadcastCommand`](#onbroadcastcommand), [`OnMapMarkerAdd`](#onmapmarkeradd), [`OnMapMarkerAdded`](#onmapmarkeradded), [`OnMapMarkerRemove`](#onmapmarkerremove), [`OnMapMarkersClear`](#onmapmarkersclear), [`OnMapMarkersCleared`](#onmapmarkerscleared), [`OnMeleeAttack`](#onmeleeattack), [`OnPayForPlacement`](#onpayforplacement), [`OnPayForUpgrade`](#onpayforupgrade), [`OnPlayerAssist`](#onplayerassist), [`OnPlayerCommand`](#onplayercommand), [`OnPlayerCorpse`](#onplayercorpse), [`OnPlayerCorpseSpawn`](#onplayercorpsespawn), [`OnPlayerCorpseSpawned`](#onplayercorpsespawned), [`OnPlayerKeepAlive`](#onplayerkeepalive), [`OnPlayerRecovered`](#onplayerrecovered), [`OnPlayerReported`](#onplayerreported), [`OnPlayerRevive`](#onplayerrevive), [`OnPlayerSetInfo`](#onplayersetinfo), [`OnSendCommand`](#onsendcommand), [`OnUserChat`](#onuserchat), [`OnUserCommand`](#onusercommand), [`OnUserRespawn`](#onuserrespawn), [`OnUserRespawned`](#onuserrespawned), [`OnUserConnected`](#onuserconnected), [`OnUserDisconnected`](#onuserdisconnected), [`CanBeTargeted`](#canbetargeted), [`CanBeWounded`](#canbewounded), [`CanBuild`](#canbuild), [`CanBypassQueue`](#canbypassqueue), [`CanChangeCode`](#canchangecode), [`CanChangeGrade`](#canchangegrade), [`CanCraft`](#cancraft), [`CanClientLogin`](#canclientlogin), [`CanDemolish`](#candemolish), [`CanHackCrate`](#canhackcrate), [`CanUserLogin`](#canuserlogin), [`OnUserApproved`](#onuserapproved), [`CanDismountEntity`](#candismountentity), [`OnUserNameUpdated`](#onusernameupdated), [`CanEquipItem`](#canequipitem), [`OnUserGroupAdded`](#onusergroupadded), [`OnUserGroupRemoved`](#onusergroupremoved), [`OnExperimentStart`](#onexperimentstart), [`OnExperimentStarted`](#onexperimentstarted), [`OnUserPermissionGranted`](#onuserpermissiongranted), [`OnUserPermissionRevoked`](#onuserpermissionrevoked), [`OnExperimentEnd`](#onexperimentend), [`OnExperimentEnded`](#onexperimentended), [`OnUserKicked`](#onuserkicked), [`CanHideStash`](#canhidestash), [`OnUserBanned`](#onuserbanned), [`CanLootEntity`](#canlootentity), [`CanLootPlayer`](#canlootplayer), [`CanMountEntity`](#canmountentity), [`OnUserUnbanned`](#onuserunbanned), [`CanPickupEntity`](#canpickupentity), [`CanPickupLock`](#canpickuplock), [`CanRenameBed`](#canrenamebed), [`CanResearchItem`](#canresearchitem), [`CanUseLockedEntity`](#canuselockedentity), [`CanSeeStash`](#canseestash), [`OnStashExposed`](#onstashexposed), [`OnStashHidden`](#onstashhidden), [`CanSetBedPublic`](#cansetbedpublic), [`CanUnlock`](#canunlock), [`CanUseMailbox`](#canusemailbox), [`CanUseUI`](#canuseui), [`CanWearItem`](#canwearitem), [`OnClientAuth`](#onclientauth), [`OnDestroyUI`](#ondestroyui), [`OnFindSpawnPoint`](#onfindspawnpoint), [`OnLootEntity`](#onlootentity), [`OnLootEntityEnd`](#onlootentityend), [`OnLootItem`](#onlootitem), [`OnLootPlayer`](#onlootplayer), [`OnPlayerAttack`](#onplayerattack), [`OnPlayerBanned`](#onplayerbanned), [`OnPlayerChat`](#onplayerchat), [`OnPlayerConnected`](#onplayerconnected), [`OnPlayerDeath`](#onplayerdeath), [`OnPlayerDisconnected`](#onplayerdisconnected), [`OnPlayerDropActiveItem`](#onplayerdropactiveitem), [`OnPlayerHealthChange`](#onplayerhealthchange), [`OnPlayerInput`](#onplayerinput), [`OnPlayerKicked`](#onplayerkicked), [`OnPlayerLand`](#onplayerland), [`OnPlayerLanded`](#onplayerlanded), [`OnPlayerLootEnd`](#onplayerlootend), [`OnPlayerMetabolize`](#onplayermetabolize), [`OnPlayerRecover`](#onplayerrecover), [`OnPlayerRespawn`](#onplayerrespawn), [`OnPlayerRespawned`](#onplayerrespawned), [`OnRespawnInformationGiven`](#onrespawninformationgiven), [`OnPlayerSleep`](#onplayersleep), [`OnPlayerSleepEnded`](#onplayersleepended), [`OnPlayerSpawn`](#onplayerspawn), [`OnPlayerSpectate`](#onplayerspectate), [`OnPlayerSpectateEnd`](#onplayerspectateend), [`OnPlayerTick`](#onplayertick), [`OnPlayerViolation`](#onplayerviolation), [`OnPlayerVoice`](#onplayervoice), [`OnPlayerWound`](#onplayerwound), [`OnRunPlayerMetabolism`](#onrunplayermetabolism), [`OnUserApprove`](#onuserapprove), [`OnDefaultItemsReceive`](#ondefaultitemsreceive), [`OnDefaultItemsReceived`](#ondefaultitemsreceived), [`OnAnalysisComplete`](#onanalysiscomplete), [`OnNpcConversationStart`](#onnpcconversationstart), [`OnNpcConversationRespond`](#onnpcconversationrespond), [`OnNpcConversationEnded`](#onnpcconversationended), [`OnNpcConversationResponded`](#onnpcconversationresponded), [`OnNetworkGroupEntered`](#onnetworkgroupentered), [`OnNetworkGroupLeft`](#onnetworkgroupleft), [`OnDemoRecordingStart`](#ondemorecordingstart), [`OnDemoRecordingStarted`](#ondemorecordingstarted), [`OnDemoRecordingStop`](#ondemorecordingstop), [`OnDemoRecordingStopped`](#ondemorecordingstopped), [`OnLootNetworkUpdate`](#onlootnetworkupdate), [`OnInventoryNetworkUpdate`](#oninventorynetworkupdate), [`OnPlayerAddModifiers`](#onplayeraddmodifiers), [`OnThreatLevelUpdate`](#onthreatlevelupdate), [`CanUseGesture`](#canusegesture), [`OnCentralizedBanCheck`](#oncentralizedbancheck), [`OnClientCommand`](#onclientcommand), [`OnCorpsePopulate`](#oncorpsepopulate), [`CanSetRelationship`](#cansetrelationship)
<a id="canaffordtoplace"></a>
### `CanAffordToPlace`
- Useful for ignoring resource requirements for placement
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanAffordToPlace(BasePlayer player, Planner planner, Construction construction)
{
Puts("CanAffordToPlace works!");
return false;
}
```
<sub>Tags: `afford`, `player` · uMod last updated 2022-01-17</sub>
<a id="canaffordupgrade"></a>
### `CanAffordUpgrade`
- Called when the resources for an upgrade are checked
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanAffordUpgrade(BasePlayer player, BuildingBlock block, BuildingGrade.Enum grade)
{
Puts("CanAffordUpgrade works!");
return true;
}
```
<sub>Tags: `player` · uMod last updated 2022-01-19</sub>
<a id="canassignbed"></a>
### `CanAssignBed`
- Called when a player attempts to assign a bed or sleeping bag to another player
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanAssignBed(BasePlayer player, SleepingBag bag, ulong targetPlayerId)
{
Puts("CanAssignBed works!");
return null;
}
```
<sub>Tags: `assign`, `player` · uMod last updated 2021-05-08</sub>
<a id="candeployitem"></a>
### `CanDeployItem`
- Useful for denying items' deployment
**Returns:** Returning a non-null value cancels default behavior
```csharp
object CanDeployItem(BasePlayer player, Deployer deployer, NetworkableId entityId)
{
Puts("CanDeployItem works!");
return null;
}
```
<sub>Tags: `deploy`, `player` · uMod last updated 2023-05-04</sub>
<a id="canlock"></a>
### `CanLock`
- Useful for canceling the lock action
**Returns:** Returning a non-null value cancels default behavior
```csharp
object CanLock(BasePlayer player, BaseLock baseLock)
{
Puts("CanLock works!");
return null;
}
```
<sub>Tags: `lock`, `player` · uMod last updated 2021-08-14</sub>
<a id="canpushboat"></a>
### `CanPushBoat`
- Useful for canceling boat push
**Returns:** Returning a non-null value cancels default behavior
```csharp
object CanPushBoat(BasePlayer player, MotorRowboat boat)
{
Puts("CanPushBoat works!");
return null;
}
```
<sub>Tags: `push`, `player` · uMod last updated 2021-05-08</sub>
<a id="canspectatetarget"></a>
### `CanSpectateTarget`
- Called when spectate target is attempting to update
**Returns:** Returning a non-null value cancels default behavior
```csharp
object CanSpectateTarget(BasePlayer player, string filter)
{
Puts($"{player.displayName} tries to spectate with a filter: {filter}");
return null;
}
```
<sub>Tags: `spectate`, `player` · uMod last updated 2021-05-08</sub>
<a id="canupdatesign"></a>
### `CanUpdateSign`
- Called when the player attempts to change the text on a sign or lock it, or update a photo frame
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanUpdateSign(BasePlayer player, Signage sign)
{
Puts("CanUpdateSign works!");
return true;
}
```
```csharp
bool CanUpdateSign(BasePlayer player, PhotoFrame photoFrame)
{
Puts("CanUpdateSign works!");
return true;
}
```
<sub>Tags: `update`, `player` · uMod last updated 2021-05-08</sub>
<a id="canusewires"></a>
### `CanUseWires`
- Useful for allowing or preventing a player from using wires
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanUseWires(BasePlayer player)
{
Puts($"{player.displayName} has just tried to use wires");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onactiveitemchange"></a>
### `OnActiveItemChange`
- Called when active item is attempting to update
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnActiveItemChange(BasePlayer player, Item oldItem, ItemId newItemId)
{
Puts("OnActiveItemChange works!");
return null;
}
```
<sub>Tags: `active`, `player` · uMod last updated 2023-05-04</sub>
<a id="onactiveitemchanged"></a>
### `OnActiveItemChanged`
- Called when active item was changed
**Returns:** No return behavior
```csharp
void OnActiveItemChanged(BasePlayer player, Item oldItem, Item newItem)
{
Puts("OnActiveItemChanged works!");
}
```
<sub>Tags: `active`, `player` · uMod last updated 2021-05-08</sub>
<a id="onbroadcastcommand"></a>
### `OnBroadcastCommand`
- Called before a command is broadcasted to all connected clients
**Returns:** Returning a non-null value overwrites command arguments
```csharp
object OnBroadcastCommand(string command, object[] args)
{
Puts("OnBroadcastCommand works!");
return null;
}
```
<sub>Tags: `broadcast`, `player` · uMod last updated 2021-05-08</sub>
<a id="onmapmarkeradd"></a>
### `OnMapMarkerAdd`
- Called when trying to add a marker
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnMapMarkerAdd(BasePlayer player, MapNote note)
{
Puts("OnMapMarkerAdd works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onmapmarkeradded"></a>
### `OnMapMarkerAdded`
- Called after a marker was added
**Returns:** No return behavior
```csharp
void OnMapMarkerAdded(BasePlayer player, MapNote note)
{
Puts("OnMapMarkerAdded works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onmapmarkerremove"></a>
### `OnMapMarkerRemove`
- Called when trying to remove a marker
**Returns:** Returning a non-null value cancels default behaviour
```csharp
object OnMapMarkerRemove(BasePlayer player, MapNote note)
{
Puts("OnMapMarkerRemove works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onmapmarkersclear"></a>
### `OnMapMarkersClear`
- Called when trying to clear map markers
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnMapMarkersClear(BasePlayer player, List<MapNote> notes)
{
Puts("OnMapMarkersClear works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onmapmarkerscleared"></a>
### `OnMapMarkersCleared`
- Called after markers were cleared
**Returns:** No return behavior
```csharp
void OnMapMarkersCleared(BasePlayer player, List<MapNote> notes)
{
Puts("OnMapMarkersCleared works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onmeleeattack"></a>
### `OnMeleeAttack`
- Useful for canceling melee attacks
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnMeleeAttack(BasePlayer player, HitInfo info)
{
Puts("OnMeleeAttack works!");
return null;
}
```
<sub>Tags: `melee`, `player` · uMod last updated 2021-05-08</sub>
<a id="onpayforplacement"></a>
### `OnPayForPlacement`
- Called when a player is paying for placement. Useful for preventing paying for placing deployables, building blocks and etc
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnPayForPlacement(BasePlayer player, Planner planner, Construction construction)
{
Puts("OnPayForPlacement works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onpayforupgrade"></a>
### `OnPayForUpgrade`
- Called when player is paying for an upgrade. Useful for preventing paying for block upgrade
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnPayForUpgrade(BasePlayer player, BuildingBlock block, ConstructionGrade gradeTarget)
{
Puts("OnPayForUpgrade works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerassist"></a>
### `OnPlayerAssist`
- Called when a player tries to assist target player (when target is wounded)
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnPlayerAssist(BasePlayer target, BasePlayer player)
{
Puts("OnPlayerAssist works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayercommand"></a>
### `OnPlayerCommand`
- Useful for intercepting players' commands before their handling
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPlayerCommand(BasePlayer player, string command, string[] args)
{
Puts("OnPlayerCommand works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-08-05</sub>
<a id="onplayercorpse"></a>
### `OnPlayerCorpse`
- Called when a non-null corpse has just been spawned
**Returns:** No return behavior
```csharp
void OnPlayerCorpse(BasePlayer player, BaseCorpse corpse)
{
Puts($"A corpse for {player.displayName} has just been spawned!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayercorpsespawn"></a>
### `OnPlayerCorpseSpawn`
- Called when a non-null corpse is about to spawn
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPlayerCorpseSpawn(BasePlayer player)
{
Puts("OnPlayerCorpseSpawn works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayercorpsespawned"></a>
### `OnPlayerCorpseSpawned`
- Called when a non-null corpse has just been spawned
**Returns:** No return behavior
```csharp
void OnPlayerCorpseSpawned(BasePlayer player, PlayerCorpse corpse)
{
Puts("OnPlayerCorpseSpawned works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerkeepalive"></a>
### `OnPlayerKeepAlive`
- Called before a player is kept alive (Example: You started "helping" player, it keeps him alive for at least 10 seconds more to be sure he won't die until you finish picking him up)
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnPlayerKeepAlive(BasePlayer player, BasePlayer target)
{
Puts("OnPlayerKeepAlive works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerrecovered"></a>
### `OnPlayerRecovered`
- Called when the player was recovered
**Returns:** No return behavior
```csharp
void OnPlayerRecovered(BasePlayer player)
{
Puts("OnPlayerRecovered works!");
}
```
<sub>Tags: `player` · uMod last updated 2022-01-24</sub>
<a id="onplayerreported"></a>
### `OnPlayerReported`
- Called when a player has reported someone via F7
**Returns:** No return behavior
```csharp
void OnPlayerReported(BasePlayer reporter, string targetName, string targetId, string subject, string message, string type)
{
Puts($"{reporter.displayName} reported {targetName} for {subject}.");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerrevive"></a>
### `OnPlayerRevive`
- Called before the recover after reviving with a medical tool
- Useful for canceling the reviving
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnPlayerRevive(BasePlayer reviver, BasePlayer player)
{
Puts($"{reviver.displayName} revived {player.displayName}");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2022-01-24</sub>
<a id="onplayersetinfo"></a>
### `OnPlayerSetInfo`
- Called when setting player's information *(aka console variables)*
**Returns:** No return behavior
```csharp
void OnPlayerSetInfo(Connection connection, string key, string value)
{
Puts($"{connection.userid}: {key} was set to {value}");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onsendcommand"></a>
### `OnSendCommand`
- Called before a command is sent from the server to a player (or a group of players)
- Usually commands aren't sent to a group of players, so in most cases it's safe to use only OnSendCommand with a single Connection.
**Returns:** Returning a non-null value overwrites command arguments
```csharp
object OnSendCommand(List<Connection> connections, string command, object[] args)
{
Puts("OnSendCommand works!");
return null;
}
object OnSendCommand(Connection connection, string command, object[] args)
{
Puts("OnSendCommand works!");
return null;
}
```
<sub>Tags: `send`, `player` · uMod last updated 2021-05-08</sub>
<a id="onuserchat"></a>
### `OnUserChat` · *universal*
- Called when a player sends a chat message to the server
**Returns:** Returning true overrides default behavior of chat, not commands
```csharp
object OnUserChat(IPlayer player, string message)
{
Puts($"{player.Name} said: {message}");
return null;
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="onusercommand"></a>
### `OnUserCommand` · *universal*
- Useful for intercepting players' commands before their handling
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnUserCommand(IPlayer player, string command, string[] args)
{
Puts("OnUserCommand works!");
return null;
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-08-05</sub>
<a id="onuserrespawn"></a>
### `OnUserRespawn` · *universal*
- Called when a player is respawning
**Returns:** No return behavior
```csharp
void OnUserRespawn(IPlayer player)
{
Puts("OnUserRespawn works!");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2022-01-25</sub>
<a id="onuserrespawned"></a>
### `OnUserRespawned` · *universal*
- Called after a player has respawned
**Returns:** No return behavior
```csharp
void OnUserRespawned(IPlayer player)
{
Puts("OnUserRespawned works!");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2022-01-25</sub>
<a id="onuserconnected"></a>
### `OnUserConnected` · *universal*
- Called after a player has been approved and has connected to the server
**Returns:** No return behavior
```csharp
void OnUserConnected(IPlayer player)
{
Puts($"{player.Name} ({player.Id}) connected from {player.Address}");
if (player.IsAdmin)
{
Puts($"{player.Name} ({player.Id}) is admin");
}
Puts($"{player.Name} is {(player.IsBanned ? "banned" : "not banned")}");
server.Broadcast($"Welcome {player.Name} to {server.Name}!");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="onuserdisconnected"></a>
### `OnUserDisconnected` · *universal*
- Called after a player has disconnected from the server
**Returns:** No return behavior
```csharp
void OnUserDisconnected(IPlayer player)
{
Puts($"{player.Name} ({player.Id}) disconnected");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="canbetargeted"></a>
### `CanBeTargeted`
- Called when an autoturret, flame turret, shotgun trap, or helicopter turret is attempting to target the player
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanBeTargeted(BaseCombatEntity player, MonoBehaviour behaviour)
{
Puts("CanBeTargeted works!");
return true;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="canbewounded"></a>
### `CanBeWounded`
- Called when any damage is attempted on player
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanBeWounded(BasePlayer player, HitInfo info)
{
Puts("CanBeWounded works!");
return true;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="canbuild"></a>
### `CanBuild`
- Called when the player tries to build something
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanBuild(Planner planner, Construction prefab, Construction.Target target)
{
Puts("CanBuild works!");
return null;
}
```
<sub>Tags: `build`, `player` · uMod last updated 2021-05-08</sub>
<a id="canbypassqueue"></a>
### `CanBypassQueue`
- Called before the player is added to the connection queue
**Returns:** Returning true will bypass the queue, returning nothing will by default queue the player
```csharp
bool CanBypassQueue(Network.Connection connection)
{
Puts("CanBypassQueue works!");
return true;
}
```
<sub>Tags: `bypass`, `player` · uMod last updated 2021-05-08</sub>
<a id="canchangecode"></a>
### `CanChangeCode`
- Called when a player tries to change the code on a codelock
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanChangeCode(BasePlayer player, CodeLock codeLock, string newCode, bool isGuestCode)
{
Puts("CanChangeCode works!");
return null;
}
```
<sub>Tags: `change`, `player` · uMod last updated 2021-05-08</sub>
<a id="canchangegrade"></a>
### `CanChangeGrade`
- Called when a player tries to change a building grade
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanChangeGrade(BasePlayer player, BuildingBlock block, BuildingGrade.Enum grade)
{
Puts("CanChangeGrade works!");
return true;
}
```
<sub>Tags: `change`, `player` · uMod last updated 2021-05-08</sub>
<a id="cancraft"></a>
### `CanCraft`
- Called when the player attempts to craft an item
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanCraft(ItemCrafter itemCrafter, ItemBlueprint bp, int amount)
{
Puts("CanCraft works!");
return true;
}
```
```csharp
bool CanCraft(PlayerBlueprints playerBlueprints, ItemDefinition itemDefinition, int skinItemId)
{
Puts("CanCraft works!");
return true;
}
```
<sub>Tags: `craft`, `player` · uMod last updated 2021-05-08</sub>
<a id="canclientlogin"></a>
### `CanClientLogin`
- Called when the player is attempting to login
**Returns:** Returning a string will use the string as the error message
**Returns:** Returning true allows the connection, returning nothing will by default allow the connection, returning anything else will reject it with an error message
```csharp
object CanClientLogin(Network.Connection connection)
{
Puts("CanClientLogin works!");
return true;
}
```
<sub>Tags: `client`, `player` · uMod last updated 2022-09-28</sub>
<a id="candemolish"></a>
### `CanDemolish`
- Called when a player tries to demolish a building block
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanDemolish(BasePlayer player, BuildingBlock block, BuildingGrade.Enum grade)
{
Puts("CanDemolish works!");
return true;
}
```
<sub>Tags: `demolish`, `player` · uMod last updated 2021-05-08</sub>
<a id="canhackcrate"></a>
### `CanHackCrate`
- Called when a player starts hacking a locked crate
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanHackCrate(BasePlayer player, HackableLockedCrate crate)
{
Puts("CanHackCrate works!");
return null;
}
```
<sub>Tags: `hack`, `player` · uMod last updated 2021-05-08</sub>
<a id="canuserlogin"></a>
### `CanUserLogin` · *universal*
- Called when a player is attempting to connect to the server
**Returns:** Returning a string will kick the user with this reason. Returning a non-null value overrides default behavior
```csharp
object CanUserLogin(string name, string id, string ipAddress)
{
if (name.ToLower().Contains("admin"))
{
Puts($"{name} ({id}) at {ipAddress} tried to connect with 'admin' in name");
return "Sorry, your name cannot have 'admin' in it";
}
return true;
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="onuserapproved"></a>
### `OnUserApproved` · *universal*
- Called after a player is approved to connect to the server
**Returns:** No return behavior
```csharp
void OnUserApproved(string name, string id, string ipAddress)
{
Puts($"{name} ({id}) at {ipAddress} has been approved to connect");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="candismountentity"></a>
### `CanDismountEntity`
- Called when the player attempts to dismount an entity
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanDismountEntity(BasePlayer player, BaseMountable entity)
{
Puts("CanDismountEntity works!");
return null;
}
```
<sub>Tags: `dismount`, `player` · uMod last updated 2021-05-08</sub>
<a id="onusernameupdated"></a>
### `OnUserNameUpdated` · *universal*
- Called when a player's stored nickname has been changed
**Returns:** No return behavior
```csharp
void OnUserNameUpdated(string id, string oldName, string newName)
{
Puts($"Player name changed from {oldName} to {newName} for ID {id}");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="canequipitem"></a>
### `CanEquipItem`
- Called when the player attempts to equip an item
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanEquipItem(PlayerInventory inventory, Item item, int targetPos)
{
Puts("CanEquipItem works!");
return true;
}
```
<sub>Tags: `equip`, `player` · uMod last updated 2021-05-08</sub>
<a id="onusergroupadded"></a>
### `OnUserGroupAdded` · *universal*
- Called when a player has been added to a group
**Returns:** No return behavior
```csharp
void OnUserGroupAdded(string id, string groupName)
{
Puts($"Player '{id}' added to group: {groupName}");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="onusergroupremoved"></a>
### `OnUserGroupRemoved` · *universal*
- Called when a player has been removed from a group
**Returns:** No return behavior
```csharp
void OnUserGroupRemoved(string id, string groupName)
{
Puts($"Player '{id}' removed from group: {groupName}");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="onexperimentstart"></a>
### `OnExperimentStart`
- Called when the player attempts to experiment with at a workbench
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnExperimentStart(Workbench workbench, BasePlayer player)
{
Puts("OnExperimentStart works!");
return null;
}
```
<sub>Tags: `experiment`, `player` · uMod last updated 2021-05-08</sub>
<a id="onexperimentstarted"></a>
### `OnExperimentStarted`
- Called after the experimentation has started
**Returns:** No return behaviour
```csharp
void OnExperimentStarted(Workbench workbench, BasePlayer player)
{
Puts("OnExperimentStarted works!");
}
```
<sub>Tags: `experiment`, `player` · uMod last updated 2021-05-08</sub>
<a id="onuserpermissiongranted"></a>
### `OnUserPermissionGranted` · *universal*
- Called when a permission has been granted to a player
**Returns:** No return behavior
```csharp
void OnUserPermissionGranted(string id, string permName)
{
Puts($"Player '{id}' granted permission: {permName}");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="onuserpermissionrevoked"></a>
### `OnUserPermissionRevoked` · *universal*
- Called when a permission has been revoked from a player
**Returns:** No return behavior
```csharp
void OnUserPermissionRevoked(string id, string permName)
{
Puts($"Player '{id}' revoked permission: {permName}");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="onexperimentend"></a>
### `OnExperimentEnd`
- Called when an experiment is about to end
**Returns:** Returning a non-null value overrides defualt behaviour.
```csharp
object OnExperimentEnd(Workbench workbench)
{
Puts("OnExperimentEnd works!");
return null;
}
```
<sub>Tags: `experiment`, `player` · uMod last updated 2021-05-08</sub>
<a id="onexperimentended"></a>
### `OnExperimentEnded`
- Called after the experiment has finished
**Returns:** No return behaviour
```csharp
void OnExperimentEnded(Workbench workbench)
{
Puts("OnExperimentEnded works!");
}
```
<sub>Tags: `experiment`, `player` · uMod last updated 2021-05-08</sub>
<a id="onuserkicked"></a>
### `OnUserKicked` · *universal*
- Called when a player has been kicked from the server
**Returns:** No return behavior
```csharp
void OnUserKicked(IPlayer player, string reason)
{
Puts($"Player {player.Name} ({player.Id}) was kicked");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="canhidestash"></a>
### `CanHideStash`
- Called when a player tries to hide a stash
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanHideStash(BasePlayer player, StashContainer stash)
{
Puts("CanHideStash works!");
return null;
}
```
<sub>Tags: `hide`, `player` · uMod last updated 2021-05-08</sub>
<a id="onuserbanned"></a>
### `OnUserBanned` · *universal*
- Called when a player has been banned from the server
- Will have reason available if provided
**Returns:** No return behavior
```csharp
void OnUserBanned(string name, string id, string ipAddress, string reason)
{
Puts($"Player {name} ({id}) at {ipAddress} was banned: {reason}");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="canlootentity"></a>
### `CanLootEntity`
- Called when the player starts looting a DroppedItemContainer, LootableCorpse, ResourceContainer, BaseRidableAnimal, or StorageContainer entity
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanLootEntity(BasePlayer player, DroppedItemContainer container)
{
Puts("CanLootEntity works!");
return null;
}
```
```csharp
object CanLootEntity(BasePlayer player, LootableCorpse corpse)
{
Puts("CanLootEntity works!");
return null;
}
```
```csharp
object CanLootEntity(BasePlayer player, ResourceContainer container)
{
Puts("CanLootEntity works!");
return null;
}
```
```csharp
object CanLootEntity(BasePlayer player, BaseRidableAnimal animal)
{
Puts("CanLootEntity works!");
return null;
}
```
```csharp
object CanLootEntity(BasePlayer player, StorageContainer container)
{
Puts("CanLootEntity works!");
return null;
}
```
<sub>Tags: `loot`, `player` · uMod last updated 2021-05-08</sub>
<a id="canlootplayer"></a>
### `CanLootPlayer`
- Called when the player attempts to loot another player
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanLootPlayer(BasePlayer target, BasePlayer looter)
{
Puts("CanLootPlayer works!");
return true;
}
```
<sub>Tags: `loot`, `player` · uMod last updated 2021-05-08</sub>
<a id="canmountentity"></a>
### `CanMountEntity`
- Called when the player attempts to mount an entity
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanMountEntity(BasePlayer player, BaseMountable entity)
{
Puts("CanMountEntity works!");
return null;
}
```
<sub>Tags: `mount`, `player` · uMod last updated 2021-05-08</sub>
<a id="onuserunbanned"></a>
### `OnUserUnbanned` · *universal*
- Called when a player has been unbanned from the server
**Returns:** No return behavior
```csharp
void OnUserUnbanned(string name, string id, string ipAddress)
{
Puts($"Player {name} ({id}) at {ipAddress} was unbanned");
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="canpickupentity"></a>
### `CanPickupEntity`
- Called when a player attempts to pickup a deployed entity (AutoTurret, BaseMountable, BearTrap, DecorDeployable, Door, DoorCloser, ReactiveTarget, SamSite, SleepingBag, SpinnerWheel, StorageContainer, etc.)
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanPickupEntity(BasePlayer player, BaseEntity entity)
{
Puts("CanPickupEntity works!");
return true;
}
```
<sub>Tags: `pickup`, `player` · uMod last updated 2021-05-08</sub>
<a id="canpickuplock"></a>
### `CanPickupLock`
- Called when a player attempts to pickup a lock
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanPickupLock(BasePlayer player, BaseLock baseLock)
{
Puts("CanPickupLock works!");
return true;
}
```
<sub>Tags: `pickup`, `player` · uMod last updated 2021-05-08</sub>
<a id="canrenamebed"></a>
### `CanRenameBed`
- Called when the player attempts to rename a bed or sleeping bag
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanRenameBed(BasePlayer player, SleepingBag bed, string bedName)
{
Puts("CanRenameBed works!");
return null;
}
```
<sub>Tags: `rename`, `player` · uMod last updated 2021-05-08</sub>
<a id="canresearchitem"></a>
### `CanResearchItem`
- Called when the player attempts to research an item
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanResearchItem(BasePlayer player, Item targetItem)
{
Puts("CanResearchItem works!");
return null;
}
```
<sub>Tags: `research`, `player` · uMod last updated 2021-05-08</sub>
<a id="canuselockedentity"></a>
### `CanUseLockedEntity`
- Called when the player tries to use an entity that is locked
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanUseLockedEntity(BasePlayer player, BaseLock baseLock)
{
Puts("CanUseLockedEntity works!");
return true;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="canseestash"></a>
### `CanSeeStash`
- Called when a player is looking at a hidden stash
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanSeeStash(BasePlayer player, StashContainer stash)
{
Puts("CanSeeStash works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onstashexposed"></a>
### `OnStashExposed`
- Called when a player reveals a hidden stash
**Returns:** No return behavior
```csharp
void OnStashExposed(StashContainer stash, BasePlayer player)
{
Puts("OnStashExposed works");
}
```
<sub>Tags: `stash`, `player` · uMod last updated 2021-05-08</sub>
<a id="onstashhidden"></a>
### `OnStashHidden`
- Called when a player hides a stash
**Returns:** No return behavior
```csharp
void OnStashHidden(StashContainer stash, BasePlayer player)
{
Puts("OnStashHidden works!");
}
```
<sub>Tags: `stash`, `player` · uMod last updated 2021-05-08</sub>
<a id="cansetbedpublic"></a>
### `CanSetBedPublic`
- Called when a player tries to set a bed public
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanSetBedPublic(BasePlayer player, SleepingBag bed)
{
Puts("CanSetBedPublic works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="canunlock"></a>
### `CanUnlock`
- Called when the player tries to unlock a keylock or codelock
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanUnlock(BasePlayer player, BaseLock baseLock)
{
Puts("CanUnlock works!");
return null;
}
```
<sub>Tags: `unlock`, `player` · uMod last updated 2021-05-08</sub>
<a id="canusemailbox"></a>
### `CanUseMailbox`
- Called when the player tries to use a mailbox
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanUseMailbox(BasePlayer player, Mailbox mailbox)
{
Puts("CanUseMailbox works!");
return true;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="canuseui"></a>
### `CanUseUI`
- Called when the player attempts to use a custom UI
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanUseUI(BasePlayer player, string json)
{
Puts("CanUseUI works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="canwearitem"></a>
### `CanWearItem`
- Called when the player attempts to equip an item
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanWearItem(PlayerInventory inventory, Item item, int targetSlot)
{
Puts("CanWearItem works!");
return null;
}
```
<sub>Tags: `wear`, `player` · uMod last updated 2021-05-08</sub>
<a id="onclientauth"></a>
### `OnClientAuth`
- Called when the player is giving server connection authorization information
**Returns:** No return behavior
```csharp
void OnClientAuth(Connection connection)
{
Puts("OnClientAuth works!");
}
```
<sub>Tags: `client`, `player` · uMod last updated 2021-05-08</sub>
<a id="ondestroyui"></a>
### `OnDestroyUI`
- Called when a custom UI is destroyed for the player
**Returns:** No return behavior
```csharp
void OnDestroyUI(BasePlayer player, string json)
{
Puts("OnDestroyUI works!");
}
```
<sub>Tags: `destroy`, `player` · uMod last updated 2021-05-08</sub>
<a id="onfindspawnpoint"></a>
### `OnFindSpawnPoint`
- Useful for controlling player spawnpoints (like making all spawns occur in a set area)
**Returns:** Return a BasePlayer.SpawnPoint object to use that spawnpoint
```csharp
void OnFindSpawnPoint(BasePlayer player)
{
Puts("OnFindSpawnPoint works!");
}
```
<sub>Tags: `find`, `player` · uMod last updated 2021-05-08</sub>
<a id="onlootentity"></a>
### `OnLootEntity`
- Called when the player starts looting an entity
**Returns:** No return behavior
```csharp
void OnLootEntity(BasePlayer player, BaseEntity entity)
{
Puts("OnLootEntity works!");
}
```
<sub>Tags: `loot`, `player` · uMod last updated 2021-05-08</sub>
<a id="onlootentityend"></a>
### `OnLootEntityEnd`
- Called when the player stops looting an entity
**Returns:** No return behavior
```csharp
void OnLootEntityEnd(BasePlayer player, BaseCombatEntity entity)
{
Puts("OnLootEntityEnd works!");
}
```
<sub>Tags: `loot`, `player` · uMod last updated 2021-05-08</sub>
<a id="onlootitem"></a>
### `OnLootItem`
- Called when the player starts looting an item
**Returns:** No return behavior
```csharp
void OnLootItem(PlayerLoot playerLoot, Item item)
{
Puts("OnLootItem works!");
}
```
<sub>Tags: `loot`, `player` · uMod last updated 2021-06-24</sub>
<a id="onlootplayer"></a>
### `OnLootPlayer`
- Called when the player starts looting another player
**Returns:** No return behavior
```csharp
void OnLootPlayer(BasePlayer player, BasePlayer target)
{
Puts("OnLootPlayer works!");
}
```
<sub>Tags: `loot`, `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerattack"></a>
### `OnPlayerAttack`
- Useful for modifying an attack before it goes out
- hitInfo.HitEntity should be the entity that this attack would hit
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPlayerAttack(BasePlayer attacker, HitInfo info)
{
Puts("OnPlayerAttack works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-12-03</sub>
<a id="onplayerbanned"></a>
### `OnPlayerBanned`
- Called when the player is banned (Facepunch, EAC, server ban, etc.)
**Returns:** No return behavior
```csharp
void OnPlayerBanned(string name, ulong id, string address, string reason)
{
Puts("OnPlayerBanned works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerchat"></a>
### `OnPlayerChat`
- Called when the player sends chat to the server
**Returns:** Returning a non-null value overrides default behavior of chat, not commands
```csharp
object OnPlayerChat(BasePlayer player, string message, Chat.ChatChannel channel)
{
Puts("OnPlayerChat works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerconnected"></a>
### `OnPlayerConnected`
- Called after the player object is created, but before the player has spawned
**Returns:** No return behavior
```csharp
void OnPlayerConnected(BasePlayer player)
{
Puts("OnPlayerConnected works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerdeath"></a>
### `OnPlayerDeath`
- Called when the player is about to die
- HitInfo may be null sometimes
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPlayerDeath(BasePlayer player, HitInfo info)
{
Puts("OnPlayerDeath works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerdisconnected"></a>
### `OnPlayerDisconnected`
- Called after the player has disconnected from the server
**Returns:** No return behavior
```csharp
void OnPlayerDisconnected(BasePlayer player, string reason)
{
Puts("OnPlayerDisconnected works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerdropactiveitem"></a>
### `OnPlayerDropActiveItem`
- Called when the player drops their active held item
**Returns:** No return behavior
```csharp
void OnPlayerDropActiveItem(BasePlayer player, Item item)
{
Puts("OnPlayerDropActiveItem works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerhealthchange"></a>
### `OnPlayerHealthChange`
- Called just before the player's health changes
**Returns:** Returning a non-null value cancels the health change
```csharp
object OnPlayerHealthChange(BasePlayer player, float oldValue, float newValue)
{
Puts("OnPlayerHealthChange works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerinput"></a>
### `OnPlayerInput`
- Called when input is received from a connected client
**Returns:** No return behavior
```csharp
void OnPlayerInput(BasePlayer player, InputState input)
{
Puts("OnPlayerInput works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerkicked"></a>
### `OnPlayerKicked`
- Called after the player is kicked from the server
**Returns:** No return behavior
```csharp
void OnPlayerKicked(BasePlayer player, string reason)
{
Puts("OnPlayerKicked works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerland"></a>
### `OnPlayerLand`
- Called just before the player lands on the ground
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPlayerLand(BasePlayer player, float num)
{
Puts("OnPlayerLand works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerlanded"></a>
### `OnPlayerLanded`
- Called when the player landed on the ground
**Returns:** No return behavior
```csharp
void OnPlayerLanded(BasePlayer player, float num)
{
Puts("OnPlayerLanded works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerlootend"></a>
### `OnPlayerLootEnd`
- Called when the player stops looting
**Returns:** No return behavior
```csharp
void OnPlayerLootEnd(PlayerLoot inventory)
{
Puts("OnPlayerLootEnd works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayermetabolize"></a>
### `OnPlayerMetabolize`
- Called after the player's metabolism has been changed
**Returns:** No return behavior
```csharp
void OnPlayerMetabolize(PlayerMetabolism metabolism, BaseCombatEntity entity, float delta)
{
Puts("OnPlayerMetabolize works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerrecover"></a>
### `OnPlayerRecover`
- Called when the player is about to recover from the 'wounded' state
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPlayerRecover(BasePlayer player)
{
Puts("OnPlayerRecover works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerrespawn"></a>
### `OnPlayerRespawn`
- Called when a player is attempting to respawn
**Returns:** Returning a BasePlayer.SpawnPoint (takes a position and rotation), overrides the respawn location, for the variant that receives a BasePlayer.SpawnPoint argument
**Returns:** Returning a SleepingBag overrides the respawn location, for the variant that receives a SleepingBag argument
```csharp
object OnPlayerRespawn(BasePlayer player, BasePlayer.SpawnPoint spawnPoint)
{
Puts("OnPlayerRespawn works!");
return null;
}
```
```csharp
object OnPlayerRespawn(BasePlayer player, SleepingBag sleepingBag)
{
Puts("OnPlayerRespawn works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2023-08-04</sub>
<a id="onplayerrespawned"></a>
### `OnPlayerRespawned`
- Called when the player has respawned (specifically when they click the "Respawn" button)
- ONLY called after the player has transitioned from dead to not-dead, so not when they're waking up
- This means it's possible for the player to connect and disconnect from a server without OnPlayerRespawned ever triggering for them
**Returns:** No return behavior
```csharp
void OnPlayerRespawned(BasePlayer player)
{
Puts("OnPlayerRespawned works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onrespawninformationgiven"></a>
### `OnRespawnInformationGiven`
- Called when a player is about to be sent respawn information
**Returns:** No return behavior
```csharp
void OnRespawnInformationGiven(BasePlayer player, RespawnInformation respawnInformation)
{
Puts("OnRespawnInformationGiven works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-07-03</sub>
<a id="onplayersleep"></a>
### `OnPlayerSleep`
- Called when the player is about to go to sleep
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPlayerSleep(BasePlayer player)
{
Puts("OnPlayerSleep works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayersleepended"></a>
### `OnPlayerSleepEnded`
- Called when the player awakes
**Returns:** No return behavior
```csharp
void OnPlayerSleepEnded(BasePlayer player)
{
Puts("OnPlayerSleepEnded works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerspawn"></a>
### `OnPlayerSpawn`
- Called when a player is attempting to spawn for the first time
**Returns:** Returning true overrides default behavior
```csharp
object OnPlayerSpawn(BasePlayer player)
{
Puts("OnPlayerSpawn works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerspectate"></a>
### `OnPlayerSpectate`
- Called when the player starts spectating
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPlayerSpectate(BasePlayer player, string spectateFilter)
{
Puts("OnPlayerSpectate works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerspectateend"></a>
### `OnPlayerSpectateEnd`
- Called when the player stops spectating
**Returns:** Returning a non-null value stops the spectate from ending
```csharp
object OnPlayerSpectateEnd(BasePlayer player, string spectateFilter)
{
Puts("OnPlayerSpectateEnd works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayertick"></a>
### `OnPlayerTick`
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPlayerTick(BasePlayer player, PlayerTick msg, bool wasPlayerStalled)
{
Puts("OnPlayerTick works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerviolation"></a>
### `OnPlayerViolation`
- Called when the player triggers an anti-hack violation
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPlayerViolation(BasePlayer player, AntiHackType type, float amount)
{
Puts("OnPlayerViolation works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayervoice"></a>
### `OnPlayerVoice`
- Called when the player uses the in-game voice chat
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPlayerVoice(BasePlayer player, Byte[] data)
{
Puts("OnPlayerVoice works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onplayerwound"></a>
### `OnPlayerWound`
- Called when the player is about to go down to the 'wounded' state
- source might be null, check it before use
**Returns:** Returning a non-null value cancels the wounded state
```csharp
object OnPlayerWound(BasePlayer player, HitInfo info)
{
Puts("OnPlayerWound works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2022-01-17</sub>
<a id="onrunplayermetabolism"></a>
### `OnRunPlayerMetabolism`
- Called before a metabolism update occurs for the specified player
- Metabolism update consists of managing the player's temperature, health etc.
- You can use this to turn off or change certain aspects of the metabolism, either by editing values before returning, or taking complete control of the method
**Returns:** Returning a non-null value cancels the update
```csharp
object OnRunPlayerMetabolism(PlayerMetabolism metabolism, BasePlayer player, float delta)
{
Puts("OnRunPlayerMetabolism works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onuserapprove"></a>
### `OnUserApprove`
- Used by RustCore and abstracted into CanClientLogin
**Returns:** Returning a non-null value overrides default behavior, plugin should call Reject if it does this
```csharp
object OnUserApprove(Network.Connection connection)
{
Puts("OnUserApprove works!");
return null;
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-05-08</sub>
<a id="ondefaultitemsreceive"></a>
### `OnDefaultItemsReceive`
- Called when a player is about to receive default items
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnDefaultItemsReceive(PlayerInventory inventory)
{
Puts("OnDefaultItemsReceive works!");
return null;
}
```
<sub>Tags: `default`, `player` · uMod last updated 2021-05-08</sub>
<a id="ondefaultitemsreceived"></a>
### `OnDefaultItemsReceived`
- Called after a player has received default items
**Returns:** Returning a non-null value overrides default behavior
```csharp
void OnDefaultItemsReceived(PlayerInventory inventory)
{
Puts("OnDefaultItemsReceived works!");
}
```
<sub>Tags: `default`, `player` · uMod last updated 2021-05-08</sub>
<a id="onanalysiscomplete"></a>
### `OnAnalysisComplete`
- Called right after a player completes a survey crater analysis
**Returns:** No return behavior
```csharp
void OnAnalysisComplete(SurveyCrater surveyCrater, BasePlayer player)
{
Puts("OnAnalysisComplete works!");
}
```
<sub>Tags: `analysis`, `player` · uMod last updated 2021-05-08</sub>
<a id="onnpcconversationstart"></a>
### `OnNpcConversationStart`
- Called when a player tries to start a conversation with an NPC
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnNpcConversationStart(NPCTalking npcTalking, BasePlayer player, ConversationData conversationData)
{
Puts("OnNpcConversationStart works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onnpcconversationrespond"></a>
### `OnNpcConversationRespond`
- Called when a player chooses an NPC conversation response
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnNpcConversationRespond(NPCTalking npcTalking, BasePlayer player, ConversationData conversationData, ConversationData.ResponseNode responseNode)
{
Puts("OnNpcConversationRespond works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onnpcconversationended"></a>
### `OnNpcConversationEnded`
- Called right after a player has ended an NPC conversation
**Returns:** No return behavior
```csharp
void OnNpcConversationEnded(NPCTalking npcTalking, BasePlayer player)
{
Puts("OnNpcConversationEnded works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onnpcconversationresponded"></a>
### `OnNpcConversationResponded`
- Called right after a player's chosen NPC conversation response has been processed
**Returns:** No return behavior
```csharp
void OnNpcConversationResponded(NPCTalking npcTalking, BasePlayer player, ConversationData conversationData, ConversationData.ResponseNode responseNode)
{
Puts("OnNpcConversationResponded works!");
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onnetworkgroupentered"></a>
### `OnNetworkGroupEntered`
- Called after a player has entered a network group
**Returns:** No return behavior
```csharp
void OnNetworkGroupEntered(BasePlayer player, Network.Visibility.Group group)
{
Puts("OnNetworkGroupEntered works!");
}
```
<sub>Tags: `network`, `player` · uMod last updated 2021-05-08</sub>
<a id="onnetworkgroupleft"></a>
### `OnNetworkGroupLeft`
- Called after a player has left a network group
**Returns:** No return behavior
```csharp
void OnNetworkGroupLeft(BasePlayer player, Network.Visibility.Group group)
{
Puts("OnNetworkGroupLeft works!");
}
```
<sub>Tags: `network`, `player` · uMod last updated 2021-05-08</sub>
<a id="ondemorecordingstart"></a>
### `OnDemoRecordingStart`
- Called right before a demo of a player starts recording
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnDemoRecordingStart(string filename, BasePlayer player)
{
Puts("OnDemoRecordingStart works!");
return null;
}
```
<sub>Tags: `demo`, `player` · uMod last updated 2021-05-08</sub>
<a id="ondemorecordingstarted"></a>
### `OnDemoRecordingStarted`
- Called after a demo of a player has started recording
**Returns:** No return behavior
```csharp
void OnDemoRecordingStarted(string filename, BasePlayer player)
{
Puts("OnDemoRecordingStarted works!");
}
```
<sub>Tags: `demo`, `player` · uMod last updated 2021-05-08</sub>
<a id="ondemorecordingstop"></a>
### `OnDemoRecordingStop`
- Called right before a demo of a player stops recording
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnDemoRecordingStop(string filename, BasePlayer player)
{
Puts("OnDemoRecordingStop works!");
return null;
}
```
<sub>Tags: `demo`, `player` · uMod last updated 2021-05-08</sub>
<a id="ondemorecordingstopped"></a>
### `OnDemoRecordingStopped`
- Called after a demo of a player has stopped recording
**Returns:** No return behavior
```csharp
void OnDemoRecordingStopped(string filename, BasePlayer player)
{
Puts("OnDemoRecordingStopped works!");
}
```
<sub>Tags: `demo`, `player` · uMod last updated 2021-05-08</sub>
<a id="onlootnetworkupdate"></a>
### `OnLootNetworkUpdate`
- Called when a player is trying to loot a container or a container they are looting has changed its contents
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnLootNetworkUpdate(PlayerLoot loot)
{
Puts("OnLootNetworkUpdate works!");
return null;
}
```
<sub>Tags: `loot`, `player` · uMod last updated 2021-05-08</sub>
<a id="oninventorynetworkupdate"></a>
### `OnInventoryNetworkUpdate`
- Called after a player's inventory contents have changed, before it is sent over the network to one or more clients
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnInventoryNetworkUpdate(PlayerInventory inventory, ItemContainer container, ProtoBuf.UpdateItemContainer updateItemContainer, PlayerInventory.Type type, PlayerInventory.PlayerInventory.NetworkInventoryMode networkInventoryMode)
{
Puts("OnInventoryNetworkUpdate works!");
return null;
}
```
<sub>Tags: `inventory`, `player` · uMod last updated 2024-02-02</sub>
<a id="onplayeraddmodifiers"></a>
### `OnPlayerAddModifiers`
- Called after a player consumes an item such as tea that is about to apply modifiers
**Returns:** Returning a non-null value overrides default behavior (prevents the modifiers from being applied)
```csharp
object OnPlayerAddModifiers(BasePlayer player, Item item, ItemModConsumable consumable)
{
Puts("OnPlayerAddModifiers works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="onthreatlevelupdate"></a>
### `OnThreatLevelUpdate`
- Called when a player's threat level is about to be updated
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnThreatLevelUpdate(BasePlayer player)
{
Puts("OnThreatLevelUpdate works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="canusegesture"></a>
### `CanUseGesture`
- Called when a player attempts to use a gesture
**Returns:** Returning true or false overrides default behavior
```csharp
bool? CanUseGesture(BasePlayer player, GestureConfig gesture)
{
Puts("CanUseGesture works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-05-08</sub>
<a id="oncentralizedbancheck"></a>
### `OnCentralizedBanCheck`
- Called when a player is about to be checked in the centralized ban database
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnCentralizedBanCheck(Network.Connection connection)
{
Puts("OnCentralizedBanCheck works!");
return null;
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-06-12</sub>
<a id="onclientcommand"></a>
### `OnClientCommand`
- Useful for intercepting players' commands before their handling
- Called before OnPlayerCommand and OnUserCommand
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnClientCommand(Connection connection, string command)
{
Puts("OnClientCommand works!");
return null;
}
```
<sub>Tags: `user`, `player` · uMod last updated 2021-06-12</sub>
<a id="oncorpsepopulate"></a>
### `OnCorpsePopulate`
- Called when an NPC player corpse is about to be populated with loot
**Returns:** Returning a BaseCorpse overrides default behavior
```csharp
BaseCorpse OnCorpsePopulate(BasePlayer npcPlayer, BaseCorpse corpse)
{
Puts("OnCorpsePopulate works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2021-06-12</sub>
<a id="cansetrelationship"></a>
### `CanSetRelationship`
- Called when a player's relationship with another is about to be updated
**Returns:** Returning true or false overrides default behavior
```csharp
bool? CanSetRelationship(BasePlayer player, BasePlayer otherPlayer, RelationshipManager.RelationshipType relationshipType, int weight)
{
Puts("CanSetRelationship works!");
return null;
}
```
<sub>Tags: `player` · uMod last updated 2022-04-20</sub>
---
## Entity Hooks
*The generic `BaseEntity` graph — spawn, kill, damage, mount, loot, flags. Anything in the world that is not specifically an item.*
140 hooks: [`CanBradleyApcTarget`](#canbradleyapctarget), [`CanEntityBeHostile`](#canentitybehostile), [`CanSamSiteShoot`](#cansamsiteshoot), [`OnBuildingPrivilege`](#onbuildingprivilege), [`OnButtonPress`](#onbuttonpress), [`OnDieselEngineToggle`](#ondieselenginetoggle), [`OnDieselEngineToggled`](#ondieselenginetoggled), [`OnEntityMarkHostile`](#onentitymarkhostile), [`OnEntityStabilityCheck`](#onentitystabilitycheck), [`OnExcavatorGather`](#onexcavatorgather), [`OnExcavatorMiningToggled`](#onexcavatorminingtoggled), [`OnExcavatorResourceSet`](#onexcavatorresourceset), [`OnHelicopterStrafeEnter`](#onhelicopterstrafeenter), [`OnHorseHitch`](#onhorsehitch), [`OnHorseLead`](#onhorselead), [`OnInputUpdate`](#oninputupdate), [`OnMlrsFire`](#onmlrsfire), [`OnMlrsFired`](#onmlrsfired), [`OnNpcDestinationSet`](#onnpcdestinationset), [`OnNpcPlayerResume`](#onnpcplayerresume), [`OnNpcStopMoving`](#onnpcstopmoving), [`OnOutputUpdate`](#onoutputupdate), [`OnReactiveTargetReset`](#onreactivetargetreset), [`OnSamSiteTarget`](#onsamsitetarget), [`OnShopAcceptClick`](#onshopacceptclick), [`OnShopCancelClick`](#onshopcancelclick), [`OnShopCompleteTrade`](#onshopcompletetrade), [`OnSupplyDropLanded`](#onsupplydroplanded), [`OnTurretAssign`](#onturretassign), [`OnTurretAssigned`](#onturretassigned), [`OnWireClear`](#onwireclear), [`OnWireConnect`](#onwireconnect), [`CanHelicopterDropCrate`](#canhelicopterdropcrate), [`OnEngineLoadoutRefresh`](#onengineloadoutrefresh), [`CanHelicopterStrafe`](#canhelicopterstrafe), [`CanHelicopterStrafeTarget`](#canhelicopterstrafetarget), [`CanHelicopterTarget`](#canhelicoptertarget), [`CanHelicopterUseNapalm`](#canhelicopterusenapalm), [`CanNetworkTo`](#cannetworkto), [`OnHelicopterRetire`](#onhelicopterretire), [`CanNpcAttack`](#cannpcattack), [`CanNpcEat`](#cannpceat), [`CanRecycle`](#canrecycle), [`OnAirdrop`](#onairdrop), [`OnBradleyApcInitialize`](#onbradleyapcinitialize), [`OnBradleyApcHunt`](#onbradleyapchunt), [`OnBradleyApcPatrol`](#onbradleyapcpatrol), [`OnContainerDropItems`](#oncontainerdropitems), [`OnCrateDropped`](#oncratedropped), [`OnCrateHack`](#oncratehack), [`OnCrateHackEnd`](#oncratehackend), [`OnCrateLanded`](#oncratelanded), [`OnEntityDeath`](#onentitydeath), [`OnEntityDismounted`](#onentitydismounted), [`OnEntityEnter`](#onentityenter), [`OnEntityGroundMissing`](#onentitygroundmissing), [`OnEntityKill`](#onentitykill), [`OnEntityLeave`](#onentityleave), [`OnEntityMounted`](#onentitymounted), [`OnEntitySpawned`](#onentityspawned), [`OnEntityTakeDamage`](#onentitytakedamage), [`OnFireBallDamage`](#onfireballdamage), [`OnFireBallSpread`](#onfireballspread), [`OnFlameExplosion`](#onflameexplosion), [`OnHelicopterAttack`](#onhelicopterattack), [`OnHelicopterDropCrate`](#onhelicopterdropcrate), [`OnHelicopterDropDoorOpen`](#onhelicopterdropdooropen), [`OnHelicopterKilled`](#onhelicopterkilled), [`OnHelicopterOutOfCrates`](#onhelicopteroutofcrates), [`OnHelicopterTarget`](#onhelicoptertarget), [`OnLiftUse`](#onliftuse), [`OnLootSpawn`](#onlootspawn), [`OnNpcTargetSense`](#onnpctargetsense), [`OnNpcTarget`](#onnpctarget), [`OnItemRecycle`](#onitemrecycle), [`OnOvenCook`](#onovencook), [`OnOvenCooked`](#onovencooked), [`OnOvenToggle`](#onoventoggle), [`OnRecyclerToggle`](#onrecyclertoggle), [`OnResourceDepositCreated`](#onresourcedepositcreated), [`OnShopCompleteTrade`](#onshopcompletetrade-1), [`OnTurretAuthorize`](#onturretauthorize), [`OnTurretClearList`](#onturretclearlist), [`OnTurretDeauthorize`](#onturretdeauthorize), [`OnTurretModeToggle`](#onturretmodetoggle), [`OnTurretShutdown`](#onturretshutdown), [`OnTurretStartup`](#onturretstartup), [`OnTurretTarget`](#onturrettarget), [`OnTurretToggle`](#onturrettoggle), [`OnBigWheelWin`](#onbigwheelwin), [`OnBigWheelLoss`](#onbigwheelloss), [`OnSolarPanelSunUpdate`](#onsolarpanelsunupdate), [`OnBookmarkControl`](#onbookmarkcontrol), [`OnBookmarkControlStarted`](#onbookmarkcontrolstarted), [`OnBookmarkDelete`](#onbookmarkdelete), [`OnBookmarkAdd`](#onbookmarkadd), [`OnBookmarksSendControl`](#onbookmarkssendcontrol), [`OnBookmarkControlEnd`](#onbookmarkcontrolend), [`OnBookmarkControlEnded`](#onbookmarkcontrolended), [`OnRfBroadcasterAdd`](#onrfbroadcasteradd), [`OnRfBroadcasterAdded`](#onrfbroadcasteradded), [`OnRfBroadcasterRemove`](#onrfbroadcasterremove), [`OnRfBroadcasterRemoved`](#onrfbroadcasterremoved), [`OnRfListenerAdd`](#onrflisteneradd), [`OnRfListenerAdded`](#onrflisteneradded), [`OnRfListenerRemove`](#onrflistenerremove), [`OnRfFrequencyChange`](#onrffrequencychange), [`OnRfFrequencyChanged`](#onrffrequencychanged), [`OnRfListenerRemoved`](#onrflistenerremoved), [`OnSleepingBagDestroy`](#onsleepingbagdestroy), [`OnNetworkSubscriptionsUpdate`](#onnetworksubscriptionsupdate), [`OnSleepingBagDestroyed`](#onsleepingbagdestroyed), [`OnBookmarkInput`](#onbookmarkinput), [`OnEntityControl`](#onentitycontrol), [`OnTurretRotate`](#onturretrotate), [`OnCounterTargetChange`](#oncountertargetchange), [`OnCounterModeToggle`](#oncountermodetoggle), [`OnSwitchToggle`](#onswitchtoggle), [`OnSwitchToggled`](#onswitchtoggled), [`OnEntityDestroy`](#onentitydestroy), [`OnElevatorButtonPress`](#onelevatorbuttonpress), [`OnElevatorCall`](#onelevatorcall), [`OnElevatorMove`](#onelevatormove), [`CanSwapToSeat`](#canswaptoseat), [`OnRidableAnimalClaim`](#onridableanimalclaim), [`OnRidableAnimalClaimed`](#onridableanimalclaimed), [`OnEntitySaved`](#onentitysaved), [`OnEntitySnapshot`](#onentitysnapshot), [`OnEntityFlagsNetworkUpdate`](#onentityflagsnetworkupdate), [`OnIORefCleared`](#oniorefcleared), [`OnSupplyDropDropped`](#onsupplydropdropped), [`OnCargoPlaneSignaled`](#oncargoplanesignaled), [`OnWaterPurify`](#onwaterpurify), [`OnWaterPurified`](#onwaterpurified), [`OnSleepingBagValidCheck`](#onsleepingbagvalidcheck), [`OnCCTVDirectionChange`](#oncctvdirectionchange), [`OnWaterCollect`](#onwatercollect), [`OnLiquidVesselFill`](#onliquidvesselfill), [`OnLockerSwap`](#onlockerswap), [`CanLockerAcceptItem`](#canlockeracceptitem)
<a id="canbradleyapctarget"></a>
### `CanBradleyApcTarget`
- Called when an APC targets an entity
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanBradleyApcTarget(BradleyAPC apc, BaseEntity entity)
{
Puts("CanBradleyApcTarget works!");
return true;
}
```
<sub>Tags: `bradley`, `entity` · uMod last updated 2021-05-08</sub>
<a id="canentitybehostile"></a>
### `CanEntityBeHostile`
- Useful for overriding hostility of an entity
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanEntityBeHostile(BaseCombatEntity entity)
{
Puts("CanEntityBeHostile works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="cansamsiteshoot"></a>
### `CanSamSiteShoot`
- Useful for canceling the shoot of SamSite
**Returns:** Returning a non-null value cancels default behavior
```csharp
object CanSamSiteShoot(SamSite samSite)
{
Puts("CanSamSiteShoot works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onbuildingprivilege"></a>
### `OnBuildingPrivilege`
- Useful for overriding a building privilege on specific entities and etc.
**Returns:** Returning BuildingPrivlidge value overrides default behavior
```csharp
BuildingPrivlidge OnBuildingPrivilege(BaseEntity entity, OBB obb)
{
Puts($"Getting a building privilege for {entity.ShortPrefabName}!");
return null;
}
```
<sub>Tags: `building`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onbuttonpress"></a>
### `OnButtonPress`
- Called when a player is trying to press a button
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnButtonPress(PressButton button, BasePlayer player)
{
Puts("OnButtonPress works!");
return null;
}
```
<sub>Tags: `button`, `entity` · uMod last updated 2021-05-08</sub>
<a id="ondieselenginetoggle"></a>
### `OnDieselEngineToggle`
- Called when a player is trying to toggle diesel engine
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnDieselEngineToggle(DieselEngine engine, BasePlayer player)
{
Puts("OnDieselEngineToggle works!");
return null;
}
```
<sub>Tags: `diesel`, `entity` · uMod last updated 2022-09-12</sub>
<a id="ondieselenginetoggled"></a>
### `OnDieselEngineToggled`
- Called when diesel engine is toggled
**Returns:** No return behavior
```csharp
void OnDieselEngineToggled(DieselEngine engine)
{
Puts("OnDieselEngineToggled works!");
}
```
<sub>Tags: `diesel`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onentitymarkhostile"></a>
### `OnEntityMarkHostile`
- Useful for denying marking the entity hostile
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnEntityMarkHostile(BaseCombatEntity entity, float duration)
{
Puts("OnEntityMarkHostile works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onentitystabilitycheck"></a>
### `OnEntityStabilityCheck`
- Called when stability of an entity is checked
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnEntityStabilityCheck(StabilityEntity entity)
{
Puts("OnEntityStabilityCheck works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onexcavatorgather"></a>
### `OnExcavatorGather`
- Called right before moving gathered resource to container
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnExcavatorGather(ExcavatorArm arm, Item item)
{
Puts("OnExcavatorGather works!");
return null;
}
```
<sub>Tags: `excavator`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onexcavatorminingtoggled"></a>
### `OnExcavatorMiningToggled`
- Called when excavator mining arm is toggled
**Returns:** No return behavior
```csharp
void OnExcavatorMiningToggled(ExcavatorArm arm)
{
Puts("OnExcavatorMiningToggled works!");
}
```
<sub>Tags: `excavator`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onexcavatorresourceset"></a>
### `OnExcavatorResourceSet`
- Called when a player is trying to set a new resource target
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnExcavatorResourceSet(ExcavatorArm arm, string resourceName, BasePlayer player)
{
Puts("OnExcavatorResourceSet works!");
return null;
}
```
<sub>Tags: `excavator`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onhelicopterstrafeenter"></a>
### `OnHelicopterStrafeEnter`
- Called when helicopter is entering strafe
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnHelicopterStrafeEnter(PatrolHelicopterAI helicopter, Vector3 strafePosition)
{
Puts("OnHelicopterStrafeEnter works!");
return null;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onhorsehitch"></a>
### `OnHorseHitch`
- Called just before setting the hitch
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnHorseHitch(RidableHorse horse, HitchTrough hitch)
{
Puts("OnHorseHitch works!");
return null;
}
```
<sub>Tags: `horse`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onhorselead"></a>
### `OnHorseLead`
- Called when a player tries to lead a horse
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnHorseLead(BaseRidableAnimal animal, BasePlayer player)
{
Puts($"{player.displayName} tries to lead {animal.ShortPrefabName}");
return null;
}
```
<sub>Tags: `horse`, `entity` · uMod last updated 2022-01-08</sub>
<a id="oninputupdate"></a>
### `OnInputUpdate`
- Called when an input of IOEntity is updated
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnInputUpdate(IOEntity entity, int inputAmount, int slot)
{
Puts("OnInputUpdate works!");
return null;
}
```
<sub>Tags: `input`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onmlrsfire"></a>
### `OnMlrsFire`
- Called just before the MLRS is fired.
**Returns:** Returning a non-null value overrides default behaviour.
```csharp
object OnMlrsFire(MLRS mlrs, BasePlayer player)
{
Puts("OnMlrsFire works!");
return null;
}
```
<sub>Tags: `mlrs`, `entity` · uMod last updated 2022-06-21</sub>
<a id="onmlrsfired"></a>
### `OnMlrsFired`
- Called just after the MLRS has been fired.
**Returns:** No return behaviour.
```csharp
void OnMlrsFired(MLRS mlrs, BasePlayer player)
{
Puts("OnMlrsFired works!");
}
```
<sub>Tags: `mlrs`, `entity` · uMod last updated 2022-06-21</sub>
<a id="onnpcdestinationset"></a>
### `OnNpcDestinationSet`
- Useful for canceling the destination change on NPCs
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnNpcDestinationSet(NPCPlayerApex npc, Vector3 newPosition)
{
Puts("OnNpcDestinationSet works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onnpcplayerresume"></a>
### `OnNpcPlayerResume`
- Useful for canceling the invoke of TryForceToNavmesh
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnNpcPlayerResume(NPCPlayerApex npc)
{
Puts("OnNpcPlayerResume works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onnpcstopmoving"></a>
### `OnNpcStopMoving`
- Useful for denying the move stop of NPCs
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnNpcStopMoving(NPCPlayerApex npc)
{
Puts("OnNpcStopMoving works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onoutputupdate"></a>
### `OnOutputUpdate`
- Called when outputs of IOEntity are updated
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnOutputUpdate(IOEntity entity)
{
Puts("OnOutputUpdate works!");
return null;
}
```
<sub>Tags: `output`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onreactivetargetreset"></a>
### `OnReactiveTargetReset`
- Called after the reactive target is reset
**Returns:** No return behaviour
```csharp
void OnReactiveTargetReset(ReactiveTarget target)
{
Puts("OnReactiveTargetReset works!");
}
```
<sub>Tags: `reactive`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onsamsitetarget"></a>
### `OnSamSiteTarget`
- Called before last target visible time is updated
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnSamSiteTarget(SamSite samSite, BaseCombatEntity target)
{
Puts("OnSamSiteTarget works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2022-02-03</sub>
<a id="onshopacceptclick"></a>
### `OnShopAcceptClick`
- Called when a player is trying to accept a trade in ShopFront
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnShopAcceptClick(ShopFront entity, BasePlayer player)
{
Puts("OnShopAcceptClick works!");
return null;
}
```
<sub>Tags: `shop`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onshopcancelclick"></a>
### `OnShopCancelClick`
- Called when a player is cancelling a trade
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnShopCancelClick(ShopFront entity, BasePlayer player)
{
Puts("OnShopCancelClick works!");
return null;
}
```
<sub>Tags: `shop`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onshopcompletetrade"></a>
### `OnShopCompleteTrade`
- Called before the trade is completed in ShopFront
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnShopCompleteTrade(ShopFront entity)
{
Puts("OnShopCompleteTrade works!");
return null;
}
```
<sub>Tags: `shop`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onsupplydroplanded"></a>
### `OnSupplyDropLanded`
- Called after Supply Drop has landed
**Returns:** No return behavior
```csharp
void OnSupplyDropLanded(SupplyDrop entity)
{
Puts("OnSupplyDropLanded works!");
}
```
<sub>Tags: `supply`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onturretassign"></a>
### `OnTurretAssign`
- Called when a player attempts to authorize another player on a turret
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnTurretAssign(AutoTurret turret, ulong targetId, BasePlayer initiator)
{
Puts("{targetId} has been authorized on a turret by {initiator.displayName}");
return null;
}
```
<sub>Tags: `turret`, `player`, `entity` · uMod last updated 2022-07-01</sub>
<a id="onturretassigned"></a>
### `OnTurretAssigned`
- Called when a player has been authorized on a turret by another player
**Returns:** No return behaviour
```csharp
void OnTurretAssigned(AutoTurret turret, ulong targetId, BasePlayer initiator)
{
Puts($"{targetId} has been authorized on a turret by {initiator.displayName});
}
```
<sub>Tags: `turret`, `player`, `entity` · uMod last updated 2022-07-01</sub>
<a id="onwireclear"></a>
### `OnWireClear`
- Useful for preventing clearing wires
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnWireClear(BasePlayer player, IOEntity entity1, int connected, IOEntity entity2, bool flag)
{
Puts("OnWireClear works!");
return null;
}
```
<sub>Tags: `wire`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onwireconnect"></a>
### `OnWireConnect`
- Useful for preventing a wire to connect
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnWireConnect(BasePlayer player, IOEntity entity1, int inputs, IOEntity entity2, int outputs)
{
Puts("OnWireConnect works!");
return null;
}
```
<sub>Tags: `wire`, `entity` · uMod last updated 2021-05-08</sub>
<a id="canhelicopterdropcrate"></a>
### `CanHelicopterDropCrate`
- Called when a CH47 helicopter attempts to drop a crate
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanHelicopterDropCrate(CH47HelicopterAIController heli)
{
Puts("CanHelicopterDropCrate works!");
return true;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onengineloadoutrefresh"></a>
### `OnEngineLoadoutRefresh`
- Called before engine loadout data is refreshed
**Returns:** Returning a non-null value overrides default behaviour
```csharp
object OnEngineLoadoutRefresh(EngineStorage storage)
{
Puts("OnEngineLoadoutRefresh works!");
return null;
}
```
<sub>Tags: `engine`, `entity` · uMod last updated 2021-05-08</sub>
<a id="canhelicopterstrafe"></a>
### `CanHelicopterStrafe`
- Called when a patrol helicopter attempts to strafe
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanHelicopterStrafe(PatrolHelicopterAI heli)
{
Puts("CanHelicopterStrafe works!");
return true;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2021-05-08</sub>
<a id="canhelicopterstrafetarget"></a>
### `CanHelicopterStrafeTarget`
- Called when a patrol helicopter attempts to target a player to attack while strafing
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanHelicopterStrafeTarget(PatrolHelicopterAI entity, BasePlayer target)
{
Puts("CanHelicopterStrafeTarget works!");
return true;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2021-05-08</sub>
<a id="canhelicoptertarget"></a>
### `CanHelicopterTarget`
- Called when a patrol helicopter attempts to target a player to attack
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanHelicopterTarget(PatrolHelicopterAI heli, BasePlayer player)
{
Puts("CanHelicopterTarget works!");
return true;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2021-05-08</sub>
<a id="canhelicopterusenapalm"></a>
### `CanHelicopterUseNapalm`
- Called when a patrol helicopter attempts to use napalm
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanHelicopterUseNapalm(PatrolHelicopterAI heli)
{
Puts("CanHelicopterUseNapalm works!");
return true;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2021-05-08</sub>
<a id="cannetworkto"></a>
### `CanNetworkTo`
- Called when an entity attempts to network with a player
- For better performance, avoid using heavy calculations in this hook.
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanNetworkTo(BaseNetworkable entity, BasePlayer target)
{
Puts("CanNetworkTo works!");
return true;
}
```
<sub>Tags: `network`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onhelicopterretire"></a>
### `OnHelicopterRetire`
- Called before the patrol helicopter starts leaving the map.
**Returns:** Returning a non-null value overrides default behaviour.
```csharp
object OnHelicopterRetire(PatrolHelicopterAI helicopter)
{
Puts("OnHelicopterRetire works!");
return null;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2022-01-23</sub>
<a id="cannpcattack"></a>
### `CanNpcAttack`
- Called when a NPC attempts to attack another entity
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanNpcAttack(BaseNpc npc, BaseEntity target)
{
Puts("CanNpcAttack works!");
return true;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="cannpceat"></a>
### `CanNpcEat`
- Called when a NPC attempts to eat another entity
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanNpcEat(BaseNpc npc, BaseEntity target)
{
Puts("CanNpcEat works!");
return true;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="canrecycle"></a>
### `CanRecycle`
- Called when the recycler attempts to recycle an item
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanRecycle(Recycler recycler, Item item)
{
Puts("CanRecycle works!");
return true;
}
```
<sub>Tags: `recycle`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onairdrop"></a>
### `OnAirdrop`
- Called when an airdrop has been called
**Returns:** No return behavior
```csharp
void OnAirdrop(CargoPlane plane, Vector3 dropPosition)
{
Puts("OnAirdrop works!");
}
```
<sub>Tags: `airdrop`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onbradleyapcinitialize"></a>
### `OnBradleyApcInitialize`
- Called when an APC initializes
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnBradleyApcInitialize(BradleyAPC apc)
{
Puts("OnBradleyApcInitialize works!");
return null;
}
```
<sub>Tags: `bradley`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onbradleyapchunt"></a>
### `OnBradleyApcHunt`
- Called when an APC starts hunting
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnBradleyApcHunt(BradleyAPC apc)
{
Puts("OnBradleyApcHunt works!");
return null;
}
```
<sub>Tags: `bradley`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onbradleyapcpatrol"></a>
### `OnBradleyApcPatrol`
- Called when an APC is starts patrolling
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnBradleyApcPatrol(BradleyAPC apc)
{
Puts("OnBradleyApcPatrol works!");
return null;
}
```
<sub>Tags: `bradley`, `entity` · uMod last updated 2021-05-08</sub>
<a id="oncontainerdropitems"></a>
### `OnContainerDropItems`
- Called when a container is destroyed and all items are about to be dropped
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnContainerDropItems(ItemContainer container)
{
Puts("OnContainerDropItems works!");
return null;
}
```
<sub>Tags: `container`, `entity` · uMod last updated 2021-05-08</sub>
<a id="oncratedropped"></a>
### `OnCrateDropped`
- Called when a locked crate from the CH47 (Chinook) has dropped
**Returns:** No return behavior
```csharp
void OnCrateDropped(HackableLockedCrate crate)
{
Puts("OnCrateDropped works!");
}
```
<sub>Tags: `crate`, `entity` · uMod last updated 2021-05-08</sub>
<a id="oncratehack"></a>
### `OnCrateHack`
- Called when a player starts hacking a locked crate
**Returns:** No return behavior
```csharp
void OnCrateHack(HackableLockedCrate crate)
{
Puts("OnCrateHack works!");
}
```
<sub>Tags: `crate`, `entity` · uMod last updated 2021-05-08</sub>
<a id="oncratehackend"></a>
### `OnCrateHackEnd`
- Called when a player stops hacking a locked crate
**Returns:** No return behavior
```csharp
void OnCrateHackEnd(HackableLockedCrate crate)
{
Puts("OnCrateHackEnd works!");
}
```
<sub>Tags: `crate`, `entity` · uMod last updated 2021-05-08</sub>
<a id="oncratelanded"></a>
### `OnCrateLanded`
- Called when a locked crate from the CH47 (Chinook) has landed
**Returns:** No return behavior
```csharp
void OnCrateLanded(HackableLockedCrate crate)
{
Puts("OnCrateLanded works!");
}
```
<sub>Tags: `crate`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onentitydeath"></a>
### `OnEntityDeath`
- HitInfo might be null, check it before use
- Editing hitInfo has no effect because the death has already happened
**Returns:** No return behavior
```csharp
void OnEntityDeath(BaseCombatEntity entity, HitInfo info)
{
Puts("OnEntityDeath works!");
}
```
<sub>Tags: `entity` · uMod last updated 2022-01-17</sub>
<a id="onentitydismounted"></a>
### `OnEntityDismounted`
- Called when an entity is dismounted by a player
**Returns:** No return behavior
```csharp
void OnEntityDismounted(BaseMountable entity, BasePlayer player)
{
Puts("OnEntityDismounted works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onentityenter"></a>
### `OnEntityEnter`
- Called when an entity enters a trigger (water area, radiation zone, hurt zone, etc.)
**Returns:** No return behavior
```csharp
void OnEntityEnter(TriggerBase trigger, BaseEntity entity)
{
Puts("OnEntityEnter works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onentitygroundmissing"></a>
### `OnEntityGroundMissing`
- Called when an entity (sleepingbag, sign, furnace,...) is going to be destroyed because the buildingblock it is on was removed
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnEntityGroundMissing(BaseEntity entity)
{
Puts("OnEntityGroundMissing works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onentitykill"></a>
### `OnEntityKill`
- Called when an entity is destroyed
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnEntityKill(BaseNetworkable entity)
{
Puts("OnEntityKill works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2023-04-11</sub>
<a id="onentityleave"></a>
### `OnEntityLeave`
- Called when an entity leaves a trigger (water area, radiation zone, hurt zone, etc.)
**Returns:** No return behavior
```csharp
void OnEntityLeave(TriggerBase trigger, BaseEntity entity)
{
Puts("OnEntityLeave works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onentitymounted"></a>
### `OnEntityMounted`
- Called when an entity is mounted by a player
**Returns:** No return behavior
```csharp
void OnEntityMounted(BaseMountable entity, BasePlayer player)
{
Puts("OnEntityMounted works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onentityspawned"></a>
### `OnEntitySpawned`
- Called after any networked entity has spawned (including trees)
**Returns:** No return behavior
```csharp
void OnEntitySpawned(BaseNetworkable entity)
{
Puts("OnEntitySpawned works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onentitytakedamage"></a>
### `OnEntityTakeDamage`
- Alternatively, modify the HitInfo object to change the damage
- It should be okay to set the damage to 0, but if you don't return non-null, the player's client will receive a damage indicator (if entity is a BasePlayer)
- HitInfo has all kinds of useful things in it, such as Weapon, damageProperties or damageTypes
**Returns:** *(not stated upstream)*
```csharp
object OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info)
{
Puts("OnEntityTakeDamage works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onfireballdamage"></a>
### `OnFireBallDamage`
- Called when a fire ball does damage to another entity
**Returns:** No return behavior
```csharp
void OnFireBallDamage(FireBall fire, BaseCombatEntity entity, HitInfo info)
{
Puts("OnFireBallDamage works!");
}
```
<sub>Tags: `fire`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onfireballspread"></a>
### `OnFireBallSpread`
- Called when a fire ball fire spreads
**Returns:** No return behavior
```csharp
void OnFireBallSpread(FireBall ball, BaseEntity fire)
{
Puts("OnFireBallSpread works!");
}
```
<sub>Tags: `fire`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onflameexplosion"></a>
### `OnFlameExplosion`
- Called when a flame explodes
**Returns:** No return behavior
```csharp
void OnFlameExplosion(FlameExplosive explosive, BaseEntity flame)
{
Puts("OnFlameExplosion works!");
}
```
<sub>Tags: `flame`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onhelicopterattack"></a>
### `OnHelicopterAttack`
- Called when a CH47 helicopter is being attacked
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnHelicopterAttack(CH47HelicopterAIController heli)
{
Puts("OnHelicopterAttack works!");
return null;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2022-09-12</sub>
<a id="onhelicopterdropcrate"></a>
### `OnHelicopterDropCrate`
- Called when a CH47 helicopter is dropping a crate
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnHelicopterDropCrate(CH47HelicopterAIController heli)
{
Puts("OnHelicopterDropCrate works!");
return null;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onhelicopterdropdooropen"></a>
### `OnHelicopterDropDoorOpen`
- Called when a CH47 helicopter is opening its drop door
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnHelicopterDropDoorOpen(CH47HelicopterAIController heli)
{
Puts("OnHelicopterDropDoorOpen works!");
return null;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onhelicopterkilled"></a>
### `OnHelicopterKilled`
- Called when a CH47 helicopter is going to be killed
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnHelicopterKilled(CH47HelicopterAIController heli)
{
Puts("OnHelicopterKilled works!");
return null;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onhelicopteroutofcrates"></a>
### `OnHelicopterOutOfCrates`
- Called when a CH47 helicopter runs out of crates
**Returns:** Returning true or false overrides default behavior
```csharp
bool? OnHelicopterOutOfCrates(CH47HelicopterAIController heli)
{
Puts("OnHelicopterOutOfCrates works!");
return null;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2021-08-14</sub>
<a id="onhelicoptertarget"></a>
### `OnHelicopterTarget`
- Called when a helicopter turret attempts to target an entity
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnHelicopterTarget(HelicopterTurret turret, BaseCombatEntity entity)
{
Puts("OnHelicopterTarget works!");
return null;
}
```
<sub>Tags: `helicopter`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onliftuse"></a>
### `OnLiftUse`
- Called when a player calls a lift or procedural lift
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnLiftUse(Lift lift, BasePlayer player)
{
Puts("OnLiftUse works!");
return null;
}
```
```csharp
object OnLiftUse(ProceduralLift lift, BasePlayer player)
{
Puts("OnLiftUse works!");
return null;
}
```
<sub>Tags: `lift`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onlootspawn"></a>
### `OnLootSpawn`
- Called when loot spawns in a container
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnLootSpawn(LootContainer container)
{
Puts("OnLootSpawn works!");
return null;
}
```
<sub>Tags: `loot`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onnpctargetsense"></a>
### `OnNpcTargetSense`
- Called when an NPC becomes aware of another entity
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnNpcTargetSense(BaseEntity owner, BaseEntity entity, AIBrainSenses brainSenses)
{
Puts("OnNpcTargetSense works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2023-04-23</sub>
<a id="onnpctarget"></a>
### `OnNpcTarget`
- Called when an NPC targets another entity
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnNpcTarget(BaseEntity npc, BaseEntity entity)
{
Puts("OnNpcTarget works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onitemrecycle"></a>
### `OnItemRecycle`
- Called when an item is recycled in a recycler
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnItemRecycle(Item item, Recycler recycler)
{
Puts("OnItemRecycle works!");
return null;
}
```
<sub>Tags: `recycle`, `entity` · uMod last updated 2022-09-12</sub>
<a id="onovencook"></a>
### `OnOvenCook`
- Called before an oven cooks an item
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnOvenCook(BaseOven oven, Item item)
{
Puts("OnOvenCook works!");
return null;
}
```
<sub>Tags: `oven`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onovencooked"></a>
### `OnOvenCooked`
- Called after an oven cooks an item
**Returns:** No return behavior
```csharp
void OnOvenCooked(BaseOven oven, Item item, BaseEntity slot)
{
Puts("OnOvenCooked works!");
}
```
<sub>Tags: `oven`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onoventoggle"></a>
### `OnOvenToggle`
- Called when an oven (Campfire, Furnace,...) is turned on or off
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnOvenToggle(BaseOven oven, BasePlayer player)
{
Puts("OnOvenToggle works!");
return null;
}
```
<sub>Tags: `oven`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onrecyclertoggle"></a>
### `OnRecyclerToggle`
- Called when a recycler is turned on or off
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnRecyclerToggle(Recycler recycler, BasePlayer player)
{
Puts("OnRecyclerToggle works!");
return null;
}
```
<sub>Tags: `recycler`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onresourcedepositcreated"></a>
### `OnResourceDepositCreated`
- Called when a resource deposit has been created
**Returns:** No return behavior
```csharp
void OnResourceDepositCreated(ResourceDepositManager.ResourceDeposit deposit)
{
Puts("OnResourceDepositCreated works!");
}
```
<sub>Tags: `resource`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onshopcompletetrade-1"></a>
### `OnShopCompleteTrade`
- Called when a shopfront trade is complete
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnShopCompleteTrade(ShopFront shop, BasePlayer customer)
{
Puts("OnShopCompleteTrade works!");
return null;
}
```
<sub>Tags: `shop`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onturretauthorize"></a>
### `OnTurretAuthorize`
- Called when a player attempts to authorize on a turret
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnTurretAuthorize(AutoTurret turret, BasePlayer player)
{
Puts("OnTurretAuthorize works!");
return null;
}
```
<sub>Tags: `turret`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onturretclearlist"></a>
### `OnTurretClearList`
- Called when a player attempts to clear an autoturret's authorized list
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnTurretClearList(AutoTurret turret, BasePlayer player)
{
Puts("OnTurretClearList works!");
return null;
}
```
<sub>Tags: `turret`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onturretdeauthorize"></a>
### `OnTurretDeauthorize`
- Called when a player is deauthorized on an autoturret
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnTurretDeauthorize(AutoTurret turret, BasePlayer player)
{
Puts("OnTurretDeauthorize works!");
return null;
}
```
<sub>Tags: `turret`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onturretmodetoggle"></a>
### `OnTurretModeToggle`
- Called when the mode of an autoturrent is toggled
**Returns:** No return behavior
```csharp
void OnTurretModeToggle(AutoTurret turret)
{
Puts("OnTurretModeToggle works!");
}
```
<sub>Tags: `turret`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onturretshutdown"></a>
### `OnTurretShutdown`
- Called when an autoturret is shut down
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnTurretShutdown(AutoTurret turret)
{
Puts("OnTurretShutdown works!");
return null;
}
```
<sub>Tags: `turret`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onturretstartup"></a>
### `OnTurretStartup`
- Called when an autoturret starts up
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnTurretStartup(AutoTurret turret)
{
Puts("OnTurretStartup works!");
return null;
}
```
<sub>Tags: `turret`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onturrettarget"></a>
### `OnTurretTarget`
- Called when an autoturret attempts to target an entity
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnTurretTarget(AutoTurret turret, BaseCombatEntity entity)
{
Puts("OnTurretTarget works!");
return null;
}
```
<sub>Tags: `turret`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onturrettoggle"></a>
### `OnTurretToggle`
- Called when an autoturret toggles powerstate (on/off)
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnTurretToggle(AutoTurret turret)
{
Puts("OnTurretToggle works!");
return null;
}
```
<sub>Tags: `turret`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onbigwheelwin"></a>
### `OnBigWheelWin`
- Called before multiplier is applied.
**Returns:** Returning non-null value overrides default behaviour.
```csharp
object OnBigWheelWin(BigWheelGame bigWheel, Item scrap, BigWheelBettingTerminal terminal, int multiplier)
{
Puts("OnBigWheelWin works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2022-06-05</sub>
<a id="onbigwheelloss"></a>
### `OnBigWheelLoss`
- Called when a specific item is lost on the big wheel game
**Returns:** No return behavior
```csharp
void OnBigWheelLoss(BigWheelGame wheel, Item item)
{
Puts("OnBigWheelLoss works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onsolarpanelsunupdate"></a>
### `OnSolarPanelSunUpdate`
- Called when a solar panel updates the amount of energy it is getting from the sun
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnSolarPanelSunUpdate(SolarPanel panel, int currentEnergy)
{
Puts("OnSolarPanelSunUpdate works!");
return null;
}
```
<sub>Tags: `solar`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onbookmarkcontrol"></a>
### `OnBookmarkControl`
- Called when a player tries to select a bookmark at a computer station
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnBookmarkControl(ComputerStation computerStation, BasePlayer player, string bookmarkName, IRemoteControllable remoteControllable)
{
Puts("OnBookmarkControl works!");
return null;
}
```
<sub>Tags: `bookmark`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onbookmarkcontrolstarted"></a>
### `OnBookmarkControlStarted`
- Called after a player has selected a bookmark at a computer station
**Returns:** No return behavior
```csharp
void OnBookmarkControlStarted(ComputerStation computerStation, BasePlayer player, string bookmarkName, IRemoteControllable remoteControllable)
{
Puts("OnBookmarkControlStarted works!");
}
```
<sub>Tags: `bookmark`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onbookmarkdelete"></a>
### `OnBookmarkDelete`
- Called when a player tries to delete a bookmark at a computer station
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnBookmarkDelete(ComputerStation computerStation, BasePlayer player, string bookmarkName)
{
Puts("OnBookmarkDelete works!");
return null;
}
```
<sub>Tags: `bookmark`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onbookmarkadd"></a>
### `OnBookmarkAdd`
- Called when a player tries to add a bookmark at a computer station
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnBookmarkAdd(ComputerStation computerStation, BasePlayer player, string bookmarkName)
{
Puts("OnBookmarkAdd works!");
return null;
}
```
<sub>Tags: `bookmark`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onbookmarkssendcontrol"></a>
### `OnBookmarksSendControl`
- Called when a player is being sent a list of bookmarks for a computer station
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnBookmarksSendControl(ComputerStation computerStation, BasePlayer player, string bookmarks)
{
Puts("OnBookmarksSendControl works!");
return null;
}
```
<sub>Tags: `bookmarks`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onbookmarkcontrolend"></a>
### `OnBookmarkControlEnd`
- Called when a player tries to stop viewing/controlling an entity at a computer station
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnBookmarkControlEnd(ComputerStation computerStation, BasePlayer player, BaseEntity controlledEntity)
{
Puts("OnBookmarkControlEnd works!");
return null;
}
```
<sub>Tags: `bookmark`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onbookmarkcontrolended"></a>
### `OnBookmarkControlEnded`
- Called after a player has stopped viewing/controlling an entity at a computer station
**Returns:** No return behavior
```csharp
void OnBookmarkControlEnded(ComputerStation computerStation, BasePlayer player, BaseEntity controlledEntity)
{
Puts("OnBookmarkControlEnded works!");
}
```
<sub>Tags: `bookmark`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onrfbroadcasteradd"></a>
### `OnRfBroadcasterAdd`
- Called right before an object starts broadcasting an RF frequency
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnRfBroadcasterAdd(IRFObject obj, int frequency)
{
Puts("OnRfBroadcasterAdd works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onrfbroadcasteradded"></a>
### `OnRfBroadcasterAdded`
- Called right after an object has started broadcasting an RF frequency
**Returns:** No return behavior
```csharp
void OnRfBroadcasterAdded(IRFObject obj, int frequency)
{
Puts("OnRfBroadcasterAdded works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onrfbroadcasterremove"></a>
### `OnRfBroadcasterRemove`
- Called right before an object stops broadasting an RF frequency
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnRfBroadcasterRemove(IRFObject obj, int frequency)
{
Puts("OnRfBroadcasterRemove works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onrfbroadcasterremoved"></a>
### `OnRfBroadcasterRemoved`
- Called right after an object has stopped broadcasting an RF frequency
**Returns:** No return behavior
```csharp
void OnRfBroadcasterRemoved(IRFObject obj, int frequency)
{
Puts("OnRfBroadcasterRemoved works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onrflisteneradd"></a>
### `OnRfListenerAdd`
- Called right before an object starts listening to an RF frequency
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnRfListenerAdd(IRFObject obj, int frequency)
{
Puts("OnRfListenerAdd works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onrflisteneradded"></a>
### `OnRfListenerAdded`
- Called right after an object has started listening to an RF frequency
**Returns:** No return behavior
```csharp
void OnRfListenerAdded(IRFObject obj, int frequency)
{
Puts("OnRfListenerAdded works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onrflistenerremove"></a>
### `OnRfListenerRemove`
- Called right before an object stops listening to an RF frequency
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnRfListenerRemove(IRFObject obj, int frequency)
{
Puts("OnRfListenerRemove works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onrffrequencychange"></a>
### `OnRfFrequencyChange`
- Called when a player tries to change the frequency of an RF broadcaster or receiver
- Useful for preventing particular reserved frequencies from being selected
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnRfFrequencyChange(IRFObject obj, int frequency, BasePlayer player)
{
Puts("OnRfFrequencyChange works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onrffrequencychanged"></a>
### `OnRfFrequencyChanged`
- Called after a player has changed the frequency of an RF broadcaster or receiver
**Returns:** No return behavior
```csharp
void OnRfFrequencyChanged(IRFObject obj, int frequency, BasePlayer player)
{
Puts("OnRfFrequencyChanged works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onrflistenerremoved"></a>
### `OnRfListenerRemoved`
- Called right after an object has stopped listening to an RF frequency
**Returns:** No return behavior
```csharp
void OnRfListenerRemoved(IRFObject obj, int frequency)
{
Puts("OnRfListenerRemoved works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onsleepingbagdestroy"></a>
### `OnSleepingBagDestroy`
- Called when a player tries to remove a sleeping bag from their respawn screen
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnSleepingBagDestroy(SleepingBag sleepingBag, BasePlayer player)
{
Puts("OnSleepingBagDestroy works!");
return null;
}
```
<sub>Tags: `sleeping`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onnetworksubscriptionsupdate"></a>
### `OnNetworkSubscriptionsUpdate`
- Called after the Rust has determined which network groups to subscribe a player to (`groupsToAdd`), and which network groups to unsubscribe the player from (`groupsToRemove`)
- This hook is useful for situations where you want to subscribe a player to a network group that is outside their network range -- To do so, you can prevent Rust from automatically unsubscribing them by removing that group from the `groupsToRemove` list
**Returns:** Returning a non-null value prevents Rust from applying the proposed subscription changes
```csharp
object OnNetworkSubscriptionsUpdate(Network.Networkable networkable, List<Network.Visibility.Group> groupsToAdd, List<Network.Visibility.Group> groupsToRemove)
{
Puts("OnNetworkSubscriptionsUpdate works!");
}
```
<sub>Tags: `network`, `player` · uMod last updated 2023-08-11</sub>
<a id="onsleepingbagdestroyed"></a>
### `OnSleepingBagDestroyed`
- Called after a player removes a sleeping bag from their respawn screen
**Returns:** No return behavior
```csharp
void OnSleepingBagDestroyed(SleepingBag sleepingBag, BasePlayer player)
{
Puts("OnSleepingBagDestroyed works!");
}
```
<sub>Tags: `sleeping`, `entity` · uMod last updated 2022-01-17</sub>
<a id="onbookmarkinput"></a>
### `OnBookmarkInput`
- Called when input is received from a player who is using a computer station with a bookmark selected
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnBookmarkInput(ComputerStation computerStation, BasePlayer player, InputState inputState)
{
Puts("OnBookmarkInput works!");
return null;
}
```
<sub>Tags: `bookmark`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onentitycontrol"></a>
### `OnEntityControl`
- Called when a player tries to remote control an entity
**Returns:** Returning true or false overrides default behavior
```csharp
object OnEntityControl(IRemoteControllable entity)
{
Puts("OnEntityControl works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onturretrotate"></a>
### `OnTurretRotate`
- Called when a player tries to rotate an auto turret
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnTurretRotate(AutoTurret turret, BasePlayer player)
{
Puts("OnTurretRotate works!");
return null;
}
```
<sub>Tags: `turret`, `entity` · uMod last updated 2021-05-08</sub>
<a id="oncountertargetchange"></a>
### `OnCounterTargetChange`
- Called when a player tries to change the target number of a power counter
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnCounterTargetChange(PowerCounter counter, BasePlayer player, int targetNumber)
{
Puts("OnCounterTargetChange works!");
return null;
}
```
<sub>Tags: `counter`, `entity` · uMod last updated 2021-05-08</sub>
<a id="oncountermodetoggle"></a>
### `OnCounterModeToggle`
- Called when a player ties to toggle a power counter between modes
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnCounterModeToggle(PowerCounter counter, BasePlayer player, bool mode)
{
Puts("OnCounterModeToggle works!");
return null;
}
```
<sub>Tags: `counter`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onswitchtoggle"></a>
### `OnSwitchToggle`
- Called when a player tries to switch and ElectricSwitch or FuelGenerator
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnSwitchToggle(IOEntity entity, BasePlayer player)
{
Puts("OnSwitchToggle works!");
return null;
}
```
<sub>Tags: `switch`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onswitchtoggled"></a>
### `OnSwitchToggled`
- Called right after a player switches an ElectricSwitch or FuelGenerator
**Returns:** No return behavior
```csharp
void OnSwitchToggled(IOEntity entity, BasePlayer player)
{
Puts("OnSwitchToggled works!");
}
```
<sub>Tags: `switch`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onentitydestroy"></a>
### `OnEntityDestroy`
- Called right before a CH47Helicopter or BradleyAPC is destroyed
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnEntityDestroy(BaseCombatEntity entity)
{
Puts("OnEntityDestroy works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onelevatorbuttonpress"></a>
### `OnElevatorButtonPress`
- Called when a player presses a button on an elevator lift
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnElevatorButtonPress(ElevatorLift lift, BasePlayer player, Elevator.Direction direction, bool toTopOrBottom)
{
Puts("OnElevatorButtonPress works!");
return null;
}
```
<sub>Tags: `elevator`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onelevatorcall"></a>
### `OnElevatorCall`
- Called when an elevator lift is called to a specific floor by electricity
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnElevatorCall(Elevator elevator, Elevator topElevator)
{
Puts("OnElevatorCall works!");
return null;
}
```
<sub>Tags: `elevator`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onelevatormove"></a>
### `OnElevatorMove`
- Called right before an elevator starts moving to the target floor
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnElevatorMove(Elevator topElevator, int targetFloor)
{
Puts("OnElevatorMove works!");
return null;
}
```
<sub>Tags: `elevator`, `entity` · uMod last updated 2021-05-08</sub>
<a id="canswaptoseat"></a>
### `CanSwapToSeat`
- Called when a player tries to switch seats, to determine whether each seat is eligible to be swapped to
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanSwapToSeat(BasePlayer player, BaseMountable mountable)
{
Puts("CanSwapToSeat works!");
return true;
}
```
<sub>Tags: `swap`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onridableanimalclaim"></a>
### `OnRidableAnimalClaim`
- Called when a player tries to claim a horse
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnRidableAnimalClaim(BaseRidableAnimal animal, BasePlayer player)
{
Puts("OnRidableAnimalClaim works!");
return null;
}
```
<sub>Tags: `ridable`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onridableanimalclaimed"></a>
### `OnRidableAnimalClaimed`
- Called after a player has claimed a horse
**Returns:** No return behavior
```csharp
void OnRidableAnimalClaimed(BaseRidableAnimal animal, BasePlayer player)
{
Puts("OnRidableAnimalClaimed works!");
}
```
<sub>Tags: `ridable`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onentitysaved"></a>
### `OnEntitySaved`
- Called after a BaseNetworkable has been saved to a ProtoBuf object and is about to be serialized to a network stream or network cache
**Returns:** No return behavior
```csharp
void OnEntitySaved(BaseNetworkable entity, BaseNetworkable.SaveInfo saveInfo)
{
Puts("OnEntitySaved works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onentitysnapshot"></a>
### `OnEntitySnapshot`
- Called when an entity snapshot is about to be sent to a client connection
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnEntitySnapshot(BaseNetworkable entity, Connection connection)
{
Puts("OnEntitySnapshot works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onentityflagsnetworkupdate"></a>
### `OnEntityFlagsNetworkUpdate`
- Called after an entity's flags have been updated on the server, before they are sent over the network
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnEntityFlagsNetworkUpdate(BaseEntity entity)
{
Puts("OnEntityFlagsNetworkUpdate works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="oniorefcleared"></a>
### `OnIORefCleared`
- Called after a wire has been disconnected from an electrical entity, such as when its connected entity was destroyed or when a player removed the wire
**Returns:** No return behavior
```csharp
void OnIORefCleared(IOEntity.IORef ioRef, IOEntity ioEntity)
{
Puts("OnIORefCleared works!");
}
```
<sub>Tags: `entity` · uMod last updated 2021-05-08</sub>
<a id="onsupplydropdropped"></a>
### `OnSupplyDropDropped`
- Called right after a cargo plane has dropped a supply drop
**Returns:** No return behavior
```csharp
void OnSupplyDropDropped(SupplyDrop supplyDrop, CargoPlane cargoPlane)
{
Puts("OnSupplyDropDropped works!");
}
```
<sub>Tags: `supply`, `entity` · uMod last updated 2021-05-08</sub>
<a id="oncargoplanesignaled"></a>
### `OnCargoPlaneSignaled`
- Called right after a supply signal has called a cargo plane
**Returns:** No return behavior
```csharp
void OnCargoPlaneSignaled(CargoPlane cargoPlane, SupplySignal supplySignal)
{
Puts("OnCargoPlaneSignaled works!");
}
```
<sub>Tags: `cargo`, `entity` · uMod last updated 2021-05-08</sub>
<a id="onwaterpurify"></a>
### `OnWaterPurify`
- Called when salt water is about to be converted to fresh water in a water purifier
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnWaterPurify(WaterPurifier waterPurifier, float timeCooked)
{
Puts("OnWaterPurify works!");
return null;
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onwaterpurified"></a>
### `OnWaterPurified`
- Called after salt water has been converted to fresh water in a water purifier
**Returns:** No return behavior
```csharp
void OnWaterPurified(WaterPurifier waterPurifier, float timeCooked)
{
Puts("OnWaterPurified works!");
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onsleepingbagvalidcheck"></a>
### `OnSleepingBagValidCheck`
- Called when determining if a sleeping bag is a valid respawn location for a player
- Useful in conjunction with OnRespawnInformationGiven since a custom sleeping bag will need to pass this check
**Returns:** Returning true or false overrides default behavior
```csharp
bool? OnSleepingBagValidCheck(SleepingBag bag, ulong targetPlayerID, bool ignoreTimers)
{
Puts("OnSleepingBagValidCheck works!");
return null;
}
```
<sub>Tags: `item` · uMod last updated 2021-06-12</sub>
<a id="oncctvdirectionchange"></a>
### `OnCCTVDirectionChange`
- Called when a player attempts to change the direction of a CCTV camera to face them
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnCCTVDirectionChange(CCTV_RC camera, BasePlayer player)
{
Puts("OnCCTVDirectionChange works!");
return null;
}
```
<sub>Tags: `entity` · uMod last updated 2022-01-24</sub>
<a id="onwatercollect"></a>
### `OnWaterCollect`
- Called when a water catcher is about to collect water
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnWaterCollect(WaterCatcher waterCatcher)
{
Puts("OnWaterCollect works!");
return null;
}
```
<sub>Tags: `entity`, `item` · uMod last updated 2021-07-03</sub>
<a id="onliquidvesselfill"></a>
### `OnLiquidVesselFill`
- Called when a player is attempting to fill a liquid vessel
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnLiquidVesselFill(BaseLiquidVessel liquidVessel, BasePlayer player, LiquidContainer facingLiquidContainer)
{
Puts("OnLiquidVesselFill works!");
return null;
}
```
<sub>Tags: `entity`, `item` · uMod last updated 2021-07-03</sub>
<a id="onlockerswap"></a>
### `OnLockerSwap`
- Called when a player clicks the "Swap" button while viewing a locker interface
**Returns:** Returning non-null value overrides default behavior
```csharp
object OnLockerSwap(Locker locker, int startIndex, BasePlayer player)
{
Puts("OnLockerSwap works!");
return null;
}
```
<sub>Tags: `entity`, `locker` · uMod last updated 2023-12-10</sub>
<a id="canlockeracceptitem"></a>
### `CanLockerAcceptItem`
- Called before an item is attempted to be placed inside a locker
**Returns:** Returning true or false overrides default behavior
```csharp
object CanLockerAcceptItem(Locker locker, Item item, int targetPos)
{
Puts("CanLockerAcceptItem works!");
return null;
}
```
<sub>Tags: `entity`, `locker` · uMod last updated 2023-12-10</sub>
---
## Item Hooks
*Item stacks and containers: add, remove, split, stack, move, repair, research, craft, use.*
43 hooks: [`CanAcceptItem`](#canacceptitem), [`CanDropActiveItem`](#candropactiveitem), [`OnBackpackDrop`](#onbackpackdrop), [`OnCardSwipe`](#oncardswipe), [`OnItemRemove`](#onitemremove), [`OnMapImageUpdated`](#onmapimageupdated), [`CanCombineDroppedItem`](#cancombinedroppeditem), [`CanMoveItem`](#canmoveitem), [`CanStackItem`](#canstackitem), [`OnFuelConsume`](#onfuelconsume), [`OnFuelConsumed`](#onfuelconsumed), [`OnFindBurnable`](#onfindburnable), [`OnHealingItemUse`](#onhealingitemuse), [`OnItemAction`](#onitemaction), [`OnItemAddedToContainer`](#onitemaddedtocontainer), [`OnItemCraft`](#onitemcraft), [`OnItemCraftCancelled`](#onitemcraftcancelled), [`OnItemCraftFinished`](#onitemcraftfinished), [`OnItemDeployed`](#onitemdeployed), [`OnItemDropped`](#onitemdropped), [`OnItemPickup`](#onitempickup), [`OnItemRemovedFromContainer`](#onitemremovedfromcontainer), [`OnItemRepair`](#onitemrepair), [`OnItemResearch`](#onitemresearch), [`OnItemResearched`](#onitemresearched), [`OnResearchCostDetermine`](#onresearchcostdetermine), [`OnItemSplit`](#onitemsplit), [`OnItemUpgrade`](#onitemupgrade), [`OnItemUse`](#onitemuse), [`OnLoseCondition`](#onlosecondition), [`OnMaxStackable`](#onmaxstackable), [`OnTrapArm`](#ontraparm), [`OnTrapDisarm`](#ontrapdisarm), [`OnTrapSnapped`](#ontrapsnapped), [`OnTrapTrigger`](#ontraptrigger), [`OnBonusItemDrop`](#onbonusitemdrop), [`OnBonusItemDropped`](#onbonusitemdropped), [`OnItemRefill`](#onitemrefill), [`OnItemLock`](#onitemlock), [`OnItemUnlock`](#onitemunlock), [`OnItemSubmit`](#onitemsubmit), [`OnItemStacked`](#onitemstacked), [`OnIngredientsCollect`](#oningredientscollect)
<a id="canacceptitem"></a>
### `CanAcceptItem`
- Called when attempting to put an item in a container
**Returns:** Returning CanAcceptResult value overrides default behavior
```csharp
ItemContainer.CanAcceptResult? CanAcceptItem(ItemContainer container, Item item, int targetPos)
{
Puts("CanAcceptItem works!");
return null;
}
```
<sub>Tags: `accept`, `item` · uMod last updated 2021-05-08</sub>
<a id="candropactiveitem"></a>
### `CanDropActiveItem`
- Called when a player attempts to drop their active item
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanDropActiveItem(BasePlayer player)
{
Puts("CanDropActiveItem works!");
return true;
}
```
<sub>Tags: `drop`, `item` · uMod last updated 2021-05-08</sub>
<a id="onbackpackdrop"></a>
### `OnBackpackDrop`
- Called just before a backpack is dropped from a player on death.
**Returns:** Return non-null to override default behaviour.
```csharp
object OnBackpackDrop(Item backpack, BasePlayer player)
{
Puts("OnBackpackDrop works!");
return null;
}
```
<sub>Tags: `rust` · uMod last updated 2024-05-08</sub>
<a id="oncardswipe"></a>
### `OnCardSwipe`
- Called when a player is trying to swipe a card
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnCardSwipe(CardReader cardReader, Keycard card, BasePlayer player)
{
Puts("OnCardSwipe works!");
return null;
}
```
<sub>Tags: `card`, `item` · uMod last updated 2021-05-08</sub>
<a id="onitemremove"></a>
### `OnItemRemove`
- Called before an item is destroyed
**Returns:** Return a non-null value stop item from being destroyed
```csharp
// Example that stops item from being destroyed
object OnItemRemove(Item item)
{
Puts("OnItemRemove works!");
return null;
}
```
```csharp
// Example that does not stop item from being destroyed
void OnItemRemove(Item item)
{
Puts("OnItemRemove works!");
}
```
<sub>Tags: `item` · uMod last updated 2022-01-17</sub>
<a id="onmapimageupdated"></a>
### `OnMapImageUpdated`
- Called when player updates map item's image
- Useful for executing any action when map image is updated
**Returns:** No return behavior
```csharp
void OnMapImageUpdated()
{
Puts("OnMapImageUpdated works!");
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="cancombinedroppeditem"></a>
### `CanCombineDroppedItem`
- Called when an item is dropped on another item
**Returns:** Returning a non-null value overwrites command arguments
```csharp
object CanCombineDroppedItem(DroppedItem item, DroppedItem targetItem)
{
Puts("CanCombineDroppedItem works!");
return null;
}
```
<sub>Tags: `combine`, `item` · uMod last updated 2021-05-08</sub>
<a id="canmoveitem"></a>
### `CanMoveItem`
- Called when moving an item from one inventory slot to another
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanMoveItem(Item item, PlayerInventory playerLoot, ItemContainerId targetContainer, int targetSlot, int amount, ItemMoveModifier itemMoveModifier)
{
Puts("CanMoveItem works!");
return null;
}
```
<sub>Tags: `move`, `item` · uMod last updated 2024-02-02</sub>
<a id="canstackitem"></a>
### `CanStackItem`
- Called when moving an item onto another item
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanStackItem(Item item, Item targetItem)
{
Puts("CanStackItem works!");
return true;
}
```
<sub>Tags: `stack`, `item` · uMod last updated 2021-05-08</sub>
<a id="onfuelconsume"></a>
### `OnFuelConsume`
- Called right before fuel is used (furnace, lanterns, camp fires, etc.)
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnFuelConsume(BaseOven oven, Item fuel, ItemModBurnable burnable)
{
Puts("OnFuelConsume works!");
return null;
}
```
<sub>Tags: `fuel`, `item` · uMod last updated 2021-05-08</sub>
<a id="onfuelconsumed"></a>
### `OnFuelConsumed`
- Called after fuel is used (furnace, lanterns, camp fires, etc.)
**Returns:** No return behavior
```csharp
void OnFuelConsumed(BaseOven oven, Item fuel, ItemModBurnable burnable)
{
Puts("OnFuelConsumed works!");
}
```
<sub>Tags: `fuel`, `item` · uMod last updated 2021-05-08</sub>
<a id="onfindburnable"></a>
### `OnFindBurnable`
- Called when looking for fuel for the oven
**Returns:** Returning an Item overrides default behavior
```csharp
Item OnFindBurnable(BaseOven oven)
{
Puts("OnFindBurnable works!");
return null;
}
```
<sub>Tags: `find`, `item` · uMod last updated 2022-10-05</sub>
<a id="onhealingitemuse"></a>
### `OnHealingItemUse`
- Called when a player attempts to use a medical tool
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnHealingItemUse(MedicalTool tool, BasePlayer player)
{
Puts("OnHealingItemUse works!");
return null;
}
```
<sub>Tags: `healing`, `item` · uMod last updated 2021-05-08</sub>
<a id="onitemaction"></a>
### `OnItemAction`
- Called when a button is clicked on an item in the inventory (drop, unwrap, ...)
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnItemAction(Item item, string action, BasePlayer player)
{
Puts("OnItemAction works!");
return null;
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemaddedtocontainer"></a>
### `OnItemAddedToContainer`
- Called right after an item was added to a container
- An entire stack has to be created, not just adding more wood to a wood stack for example
**Returns:** No return behavior
```csharp
void OnItemAddedToContainer(ItemContainer container, Item item)
{
Puts("OnItemAddedToContainer works!");
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemcraft"></a>
### `OnItemCraft`
- Called just before an item is added to the crafting queue
**Returns:** Returning true or false overrides default behavior
```csharp
object OnItemCraft(ItemCraftTask task, BasePlayer player, Item item)
{
Puts("OnItemCraft works!");
return null;
}
```
<sub>Tags: `item` · uMod last updated 2023-10-11</sub>
<a id="onitemcraftcancelled"></a>
### `OnItemCraftCancelled`
- Called before an item has been crafted
**Returns:** No return behavior
```csharp
void OnItemCraftCancelled(ItemCraftTask task)
{
Puts("OnItemCraftCancelled works!");
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemcraftfinished"></a>
### `OnItemCraftFinished`
- Called right after an item has been crafted
**Returns:** No return behavior
```csharp
void OnItemCraftFinished(ItemCraftTask task, Item item)
{
Puts("OnItemCraftFinished works!");
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemdeployed"></a>
### `OnItemDeployed`
- Called right after an item has been deployed
**Returns:** No return behavior
```csharp
void OnItemDeployed(Deployer deployer, BaseEntity entity, BaseEntity slotEntity)
{
Puts("OnItemDeployed works!");
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemdropped"></a>
### `OnItemDropped`
- Called right after an item has been dropped
**Returns:** No return behavior
```csharp
void OnItemDropped(Item item, BaseEntity entity)
{
Puts("OnItemDropped works!");
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitempickup"></a>
### `OnItemPickup`
- Called right after an item has been picked up
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnItemPickup(Item item, BasePlayer player)
{
Puts("OnItemPickup works!");
return null;
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemremovedfromcontainer"></a>
### `OnItemRemovedFromContainer`
- Called right after an item was removed from a container
- The entire stack has to be removed for this to be called, not just a little bit
**Returns:** No return behavior
```csharp
void OnItemRemovedFromContainer(ItemContainer container, Item item)
{
Puts("OnItemRemovedFromContainer works!");
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemrepair"></a>
### `OnItemRepair`
- Called right before an item is repaired
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnItemRepair(BasePlayer player, Item item)
{
Puts("OnItemRepair works!");
return null;
}
```
<sub>Tags: `item` · uMod last updated 2021-07-21</sub>
<a id="onitemresearch"></a>
### `OnItemResearch`
- Called right before a player begins to research an item
**Returns:** No return behavior
```csharp
void OnItemResearch(ResearchTable table, Item targetItem, BasePlayer player)
{
Puts("OnItemResearch works!");
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemresearched"></a>
### `OnItemResearched`
- Called right before a player finishes researching an item
**Returns:** Returning a float will affect if researching is successful or not
```csharp
float OnItemResearched(ResearchTable table, float chance)
{
Puts("OnItemResearched works!");
return 1;
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onresearchcostdetermine"></a>
### `OnResearchCostDetermine`
- Called when an item is being scrapped at a research table or when a blueprint is being unlocked in a tech tree
**Returns:** Returning a numeric value (int) overrides the default value
```csharp
object OnResearchCostDetermine(Item item, ResearchTable researchTable)
{
Puts("OnResearchCostDetermine works!");
return null;
}
```
```csharp
object OnResearchCostDetermine(ItemDefinition itemDefinition)
{
Puts("OnResearchCostDetermine works!");
return null;
}
```
<sub>Tags: `research`, `item` · uMod last updated 2021-05-08</sub>
<a id="onitemsplit"></a>
### `OnItemSplit`
- Called right before an item is split into multiple stacks
**Returns:** Returning an Item overrides default behavior
```csharp
Item OnItemSplit(Item item, int amount)
{
Puts("OnItemSplit works!");
return null;
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemupgrade"></a>
### `OnItemUpgrade`
- Called right before an item is upgraded
**Returns:** No return behavior
```csharp
void OnItemUpgrade(Item item, Item upgraded, BasePlayer player)
{
Puts("OnItemUpgrade works!");
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemuse"></a>
### `OnItemUse`
- Called when an item is used
**Returns:** Returning an int overrides the amount consumed.
```csharp
int OnItemUse(Item item, int amountToUse)
{
Puts("OnItemUse works!");
return amountToUse;
}
```
<sub>Tags: `item` · uMod last updated 2022-07-27</sub>
<a id="onlosecondition"></a>
### `OnLoseCondition`
- Called right before the condition of the item is modified
**Returns:** No return behavior
```csharp
void OnLoseCondition(Item item, ref float amount)
{
Puts("OnLoseCondition works!");
}
```
<sub>Tags: `lose`, `item` · uMod last updated 2021-05-08</sub>
<a id="onmaxstackable"></a>
### `OnMaxStackable`
- Called when an items max stackable is calculated
**Returns:** Returning a numeric value (int) overrides the default value
```csharp
int OnMaxStackable(Item item)
{
Puts("OnMaxStackable works!");
return 1;
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="ontraparm"></a>
### `OnTrapArm`
- Called when the player arms a bear trap
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnTrapArm(BearTrap trap, BasePlayer player)
{
Puts("OnTrapArm works!");
return null;
}
```
<sub>Tags: `trap`, `item` · uMod last updated 2021-05-08</sub>
<a id="ontrapdisarm"></a>
### `OnTrapDisarm`
- Called when the player disarms a land mine
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnTrapDisarm(Landmine trap, BasePlayer player)
{
Puts("OnTrapDisarm works!");
return null;
}
```
<sub>Tags: `trap`, `item` · uMod last updated 2021-05-08</sub>
<a id="ontrapsnapped"></a>
### `OnTrapSnapped`
- Called when a trap is triggered by a game object
**Returns:** No return behavior
```csharp
void OnTrapSnapped(BaseTrapTrigger trap, GameObject go)
{
Puts("OnTrapSnapped works!");
}
```
<sub>Tags: `trap`, `item` · uMod last updated 2021-05-08</sub>
<a id="ontraptrigger"></a>
### `OnTrapTrigger`
- Called when a trap is triggered by a game object
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnTrapTrigger(BaseTrap trap, GameObject go)
{
Puts("OnTrapTrigger works!");
return null;
}
```
<sub>Tags: `trap`, `item` · uMod last updated 2021-05-08</sub>
<a id="onbonusitemdrop"></a>
### `OnBonusItemDrop`
- Called when a loot container is about to drop bonus scrap for a player who has a corresponding tea buff
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnBonusItemDrop(Item item, BasePlayer player)
{
Puts("OnBonusItemDrop works!");
return null;
}
```
<sub>Tags: `bonus`, `item` · uMod last updated 2021-05-08</sub>
<a id="onbonusitemdropped"></a>
### `OnBonusItemDropped`
- Called after a loot container has dropped bonus scrap for a player who has a corresponding tea buff
**Returns:** No return behavior
```csharp
void OnBonusItemDropped(Item item, BasePlayer player)
{
Puts("OnBonusItemDropped works!");
}
```
<sub>Tags: `bonus`, `item` · uMod last updated 2021-05-08</sub>
<a id="onitemrefill"></a>
### `OnItemRefill`
- Called right before an item such as a diving tank is repaired without using a repair bench
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnItemRefill(Item item, BasePlayer player)
{
Puts("OnItemRefill works!");
return null;
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemlock"></a>
### `OnItemLock`
- Called right before an item is locked, such as in a modular car inventory
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnItemLock(Item item)
{
Puts("OnItemLock works!");
return null;
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemunlock"></a>
### `OnItemUnlock`
- Called right before an item is unlocked, such as in a modular car inventory
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnItemUnlock(Item item)
{
Puts("OnItemUnlock works!");
return null;
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemsubmit"></a>
### `OnItemSubmit`
- Called when a player submits an item into a mailbox or dropbox
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnItemSubmit(Item item, Mailbox mailbox, BasePlayer player)
{
Puts("OnItemSubmit works!");
return null;
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="onitemstacked"></a>
### `OnItemStacked`
- Called after an item has been stacked
**Returns:** No return behavior
```csharp
void OnItemStacked(Item destinationItem, Item sourceItem, ItemContainer destinationContainer)
{
Puts("OnItemStacked works!");
}
```
<sub>Tags: `item` · uMod last updated 2021-05-08</sub>
<a id="oningredientscollect"></a>
### `OnIngredientsCollect`
- Called when ingredients are about to be collected for crafting an item
**Returns:** Returning a non-null value cancels default behavior
```csharp
bool? OnIngredientsCollect(ItemCrafter itemCrafter, ItemBlueprint blueprint, ItemCraftTask task, int amount, BasePlayer player)
{
Puts("OnIngredientsCollect works!");
return null;
}
```
<sub>Tags: `craft` · uMod last updated 2021-06-12</sub>
---
## Resource Hooks
*Gathering and node dispensers — ore, trees, corpses, collectibles, quarries.*
12 hooks: [`CanTakeCutting`](#cantakecutting), [`OnCollectiblePickup`](#oncollectiblepickup), [`OnGrowableGathered`](#ongrowablegathered), [`OnQuarryToggled`](#onquarrytoggled), [`OnRemoveDying`](#onremovedying), [`OnGrowableGather`](#ongrowablegather), [`OnDispenserBonus`](#ondispenserbonus), [`OnDispenserGather`](#ondispensergather), [`OnQuarryEnabled`](#onquarryenabled), [`OnTreeMarkerHit`](#ontreemarkerhit), [`OnQuarryGather`](#onquarrygather), [`OnSurveyGather`](#onsurveygather)
<a id="cantakecutting"></a>
### `CanTakeCutting`
- Called when a player is trying to take a cutting (clone) of a GrowableEntity
**Returns:** Returning a non-null value cancels default behavior
```csharp
object CanTakeCutting(BasePlayer player, GrowableEntity entity)
{
Puts("CanTakeCutting works!");
return null;
}
```
<sub>Tags: `take`, `resource` · uMod last updated 2022-01-24</sub>
<a id="oncollectiblepickup"></a>
### `OnCollectiblePickup`
- Called when the player collects an item
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnCollectiblePickup(CollectibleEntity collectible, BasePlayer player)
{
Puts("OnCollectiblePickup works!");
return null;
}
```
<sub>Tags: `collectible`, `resource` · uMod last updated 2022-08-14</sub>
<a id="ongrowablegathered"></a>
### `OnGrowableGathered`
- Called before the player receives an item from gathering a growable entity
**Returns:** No return behavior
```csharp
void OnGrowableGathered(GrowableEntity plant, Item item, BasePlayer player)
{
Puts($"{player.displayName} has gathered {item.info.shortname} x {item.amount}.");
}
```
<sub>Tags: `growable`, `resource` · uMod last updated 2021-05-08</sub>
<a id="onquarrytoggled"></a>
### `OnQuarryToggled`
- Called when a quarry has just been toggled
**Returns:** No return behavior
```csharp
void OnQuarryToggled(MiningQuarry quarry, BasePlayer player)
{
Puts($"{player.displayName} has toggled a quarry");
}
```
<sub>Tags: `quarry`, `resource` · uMod last updated 2021-05-08</sub>
<a id="onremovedying"></a>
### `OnRemoveDying`
- Called when a player is trying to harvest a dying growable entity
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnRemoveDying(GrowableEntity plant, BasePlayer player)
{
Puts("OnRemoveDying works!");
return null;
}
```
<sub>Tags: `remove`, `resource` · uMod last updated 2021-05-08</sub>
<a id="ongrowablegather"></a>
### `OnGrowableGather`
- Called when the player gathers a growable entity
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnGrowableGather(GrowableEntity plant, BasePlayer player)
{
Puts("OnGrowableGather works!");
return null;
}
```
<sub>Tags: `growable`, `resource` · uMod last updated 2021-05-08</sub>
<a id="ondispenserbonus"></a>
### `OnDispenserBonus`
- Called before the player is given a bonus item for gathering
**Returns:** Returning an Item replaces the existing Item
```csharp
void OnDispenserBonus(ResourceDispenser dispenser, BasePlayer player, Item item)
{
Puts("OnDispenserBonus works!");
}
```
<sub>Tags: `dispenser`, `resource` · uMod last updated 2021-10-19</sub>
<a id="ondispensergather"></a>
### `OnDispenserGather`
- Called before the player is given items from a resource
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnDispenserGather(ResourceDispenser dispenser, BasePlayer player, Item item)
{
Puts("OnDispenserGather works!");
return null;
}
```
<sub>Tags: `dispenser`, `resource` · uMod last updated 2023-05-04</sub>
<a id="onquarryenabled"></a>
### `OnQuarryEnabled`
- Called when a mining quarry is turned on/enabled
**Returns:** No return behavior
```csharp
void OnQuarryEnabled(MiningQuarry quarry)
{
Puts("OnQuarryEnabled works!");
}
```
<sub>Tags: `quarry`, `resource` · uMod last updated 2021-05-08</sub>
<a id="ontreemarkerhit"></a>
### `OnTreeMarkerHit`
- Called when a player hits a tree with a tool (rock, hatchet, etc.)
**Returns:** Returning true or false overrides default behaviour
```csharp
bool? OnTreeMarkerHit(TreeEntity tree, HitInfo info)
{
Puts("OnTreeMarkerHit works!");
return null;
}
```
<sub>Tags: `resource`, `tree` · uMod last updated 2022-04-11</sub>
<a id="onquarrygather"></a>
### `OnQuarryGather`
- Called before items are gathered from a quarry
**Returns:** No return behavior
```csharp
void OnQuarryGather(MiningQuarry quarry, Item item)
{
Puts("OnQuarryGather works!");
}
```
<sub>Tags: `quarry`, `resource` · uMod last updated 2021-05-08</sub>
<a id="onsurveygather"></a>
### `OnSurveyGather`
- Called before items are gathered from a survey charge
**Returns:** No return behavior
```csharp
void OnSurveyGather(SurveyCharge survey, Item item)
{
Puts("OnSurveyGather works!");
}
```
<sub>Tags: `survey`, `resource` · uMod last updated 2021-05-08</sub>
---
## Structure Hooks
*Building blocks: placement, upgrade, demolish, rotate, stability, doors and locks.*
15 hooks: [`OnCodeEntered`](#oncodeentered), [`OnCupboardAuthorize`](#oncupboardauthorize), [`OnCupboardClearList`](#oncupboardclearlist), [`OnCupboardDeauthorize`](#oncupboarddeauthorize), [`OnDoorClosed`](#ondoorclosed), [`OnDoorOpened`](#ondooropened), [`OnDoorKnocked`](#ondoorknocked), [`OnEntityBuilt`](#onentitybuilt), [`OnHammerHit`](#onhammerhit), [`OnStructureDemolish`](#onstructuredemolish), [`OnStructureRepair`](#onstructurerepair), [`OnStructureRotate`](#onstructurerotate), [`OnStructureUpgrade`](#onstructureupgrade), [`OnConstructionPlace`](#onconstructionplace), [`OnBuildingSplit`](#onbuildingsplit)
<a id="oncodeentered"></a>
### `OnCodeEntered`
- Called when the player has entered a code in a codelock
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnCodeEntered(CodeLock codeLock, BasePlayer player, string code)
{
Puts("OnCodeEntered works!");
return null;
}
```
<sub>Tags: `code`, `structure` · uMod last updated 2021-05-08</sub>
<a id="oncupboardauthorize"></a>
### `OnCupboardAuthorize`
- Called when a cupboard attempts to authorize a player
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnCupboardAuthorize(BuildingPrivlidge privilege, BasePlayer player)
{
Puts("OnCupboardAuthorize works!");
return null;
}
```
<sub>Tags: `cupboard`, `structure` · uMod last updated 2021-05-08</sub>
<a id="oncupboardclearlist"></a>
### `OnCupboardClearList`
- Called when an attempt is made to clear a cupboard authorized list
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnCupboardClearList(BuildingPrivlidge privilege, BasePlayer player)
{
Puts("OnCupboardClearList works!");
return null;
}
```
<sub>Tags: `cupboard`, `structure` · uMod last updated 2021-05-08</sub>
<a id="oncupboarddeauthorize"></a>
### `OnCupboardDeauthorize`
- Called when a cupboard attempts to deauthorize a player
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnCupboardDeauthorize(BuildingPrivlidge privilege, BasePlayer player)
{
Puts("OnCupboardDeauthorize works!");
return null;
}
```
<sub>Tags: `cupboard`, `structure` · uMod last updated 2021-05-08</sub>
<a id="ondoorclosed"></a>
### `OnDoorClosed`
- Called when the player closed a door
**Returns:** No return behavior
```csharp
void OnDoorClosed(Door door, BasePlayer player)
{
Puts("OnDoorClosed works!");
}
```
<sub>Tags: `door`, `structure` · uMod last updated 2021-05-08</sub>
<a id="ondooropened"></a>
### `OnDoorOpened`
- Called when the player opened a door
**Returns:** No return behavior
```csharp
void OnDoorOpened(Door door, BasePlayer player)
{
Puts("OnDoorOpened works!");
}
```
<sub>Tags: `door`, `structure` · uMod last updated 2021-05-08</sub>
<a id="ondoorknocked"></a>
### `OnDoorKnocked`
- Called when the player knocks on a door
**Returns:** No return behavior
```csharp
void OnDoorKnocked(Door door, BasePlayer player)
{
Puts("OnDoorKnocked works!");
}
```
<sub>Tags: `door`, `structure` · uMod last updated 2021-05-08</sub>
<a id="onentitybuilt"></a>
### `OnEntityBuilt`
- Called when any structure is built (walls, ceilings, stairs, etc.)
**Returns:** No return behavior
```csharp
void OnEntityBuilt(Planner plan, GameObject go)
{
Puts("OnEntityBuilt works!");
}
```
<sub>Tags: `entity`, `structure` · uMod last updated 2021-05-08</sub>
<a id="onhammerhit"></a>
### `OnHammerHit`
- Called when the player has hit something with a hammer
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnHammerHit(BasePlayer player, HitInfo info)
{
Puts("OnHammerHit works!");
return null;
}
```
<sub>Tags: `hammer`, `structure` · uMod last updated 2021-05-08</sub>
<a id="onstructuredemolish"></a>
### `OnStructureDemolish`
- Called when the player selects Demolish or DemolishImmediate from the BuildingBlock or BaseCombatEntity menu
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnStructureDemolish(BaseCombatEntity entity, BasePlayer player, bool immediate)
{
Puts("OnStructureDemolish works!");
return null;
}
```
<sub>Tags: `structure` · uMod last updated 2021-05-08</sub>
<a id="onstructurerepair"></a>
### `OnStructureRepair`
- Called when the player repairs a BuildingBlock or BaseCombatEntity
**Returns:** Returning a non-null value cancels repair
```csharp
object OnStructureRepair(BaseCombatEntity entity, BasePlayer player)
{
Puts("OnStructureRepair works!");
return null;
}
```
<sub>Tags: `structure` · uMod last updated 2021-05-08</sub>
<a id="onstructurerotate"></a>
### `OnStructureRotate`
- Called when the player rotates a BuildingBlock or BaseCombatEntity
**Returns:** Returning a non-null value cancels rotate
```csharp
object OnStructureRotate(BaseCombatEntity entity, BasePlayer player)
{
Puts("OnStructureRotate works!");
return null;
}
```
<sub>Tags: `structure` · uMod last updated 2021-05-08</sub>
<a id="onstructureupgrade"></a>
### `OnStructureUpgrade`
- Called when the player upgrades the grade of a BuildingBlock or BaseCombatEntity
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnStructureUpgrade(BaseCombatEntity entity, BasePlayer player, BuildingGrade.Enum grade)
{
Puts("OnStructureUpgrade works!");
return null;
}
```
<sub>Tags: `structure` · uMod last updated 2021-05-08</sub>
<a id="onconstructionplace"></a>
### `OnConstructionPlace`
- Called when a player tries to place a building block
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnConstructionPlace(BaseEntity entity, Construction component, Construction.Target constructionTarget, BasePlayer player)
{
Puts("OnConstructionPlace works!");
return null;
}
```
<sub>Tags: `construction`, `structure` · uMod last updated 2021-05-08</sub>
<a id="onbuildingsplit"></a>
### `OnBuildingSplit`
- Called when a building is split into two
**Returns:** No return behavior
```csharp
void OnBuildingSplit(BuildingManager.Building building, uint newBuildingId)
{
Puts("OnBuildingSplit works!");
}
```
<sub>Tags: `building`, `structure` · uMod last updated 2022-09-11</sub>
---
## Terrain Hooks
*Terrain/map topology.*
1 hook: [`OnTerrainInitialized`](#onterraininitialized)
<a id="onterraininitialized"></a>
### `OnTerrainInitialized`
- Called after the terrain generation process has completed
**Returns:** No return behavior
```csharp
void OnTerrainInitialized()
{
Puts("OnTerrainInitialized works!");
}
```
<sub>Tags: `terrain` · uMod last updated 2021-05-08</sub>
---
## Vending Hooks
*Vending machines and the shop/trade flow, including the marketplace and drone deliveries.*
16 hooks: [`CanAdministerVending`](#canadministervending), [`OnGiveSoldItem`](#ongivesolditem), [`OnTakeCurrencyItem`](#ontakecurrencyitem), [`OnVendingShopRename`](#onvendingshoprename), [`CanUseVending`](#canusevending), [`CanVendingAcceptItem`](#canvendingacceptitem), [`OnAddVendingOffer`](#onaddvendingoffer), [`OnBuyVendingItem`](#onbuyvendingitem), [`OnDeleteVendingOffer`](#ondeletevendingoffer), [`OnOpenVendingAdmin`](#onopenvendingadmin), [`OnVendingShopOpened`](#onvendingshopopened), [`OnRefreshVendingStock`](#onrefreshvendingstock), [`OnRotateVendingMachine`](#onrotatevendingmachine), [`OnToggleVendingBroadcast`](#ontogglevendingbroadcast), [`OnVendingTransaction`](#onvendingtransaction), [`OnNpcGiveSoldItem`](#onnpcgivesolditem)
<a id="canadministervending"></a>
### `CanAdministerVending`
- Called when a player attempts to administer a vending machine
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanAdministerVending(BasePlayer player, VendingMachine machine)
{
Puts("CanAdministerVending works!");
return true;
}
```
<sub>Tags: `administer`, `vending` · uMod last updated 2021-05-08</sub>
<a id="ongivesolditem"></a>
### `OnGiveSoldItem`
- Called before a sold item is given
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnGiveSoldItem(NPCVendingMachine vending, Item soldItem, BasePlayer buyer)
{
Puts("OnGiveSoldItem works!");
return null;
}
```
```csharp
object OnGiveSoldItem(VendingMachine vending, Item soldItem, BasePlayer buyer)
{
Puts("OnGiveSoldItem works!");
return null;
}
```
<sub>Tags: `give`, `vending` · uMod last updated 2022-01-17</sub>
<a id="ontakecurrencyitem"></a>
### `OnTakeCurrencyItem`
- Called before currency item is taken
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnTakeCurrencyItem(VendingMachine vending, Item item)
{
Puts("OnTakeCurrencyItem works!");
return null;
}
```
<sub>Tags: `take`, `vending` · uMod last updated 2021-05-08</sub>
<a id="onvendingshoprename"></a>
### `OnVendingShopRename`
- Called when a player tries to rename vending shop
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnVendingShopRename(VendingMachine vending, string newName, BasePlayer player)
{
Puts("OnVendingShopRename works!");
return null;
}
```
<sub>Tags: `vending` · uMod last updated 2021-05-08</sub>
<a id="canusevending"></a>
### `CanUseVending`
- Called when a player attempts to use a vending machine
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanUseVending(BasePlayer player, VendingMachine machine)
{
Puts("CanUseVending works!");
return true;
}
```
<sub>Tags: `vending` · uMod last updated 2022-09-11</sub>
<a id="canvendingacceptitem"></a>
### `CanVendingAcceptItem`
- Called when a player attempts to administer a vending machine
**Returns:** Returning true or false overrides default behavior
```csharp
bool CanVendingAcceptItem(VendingMachine vending, Item item, int targetPos)
{
Puts("CanVendingAcceptItem works!");
return true;
}
```
<sub>Tags: `vending` · uMod last updated 2021-05-08</sub>
<a id="onaddvendingoffer"></a>
### `OnAddVendingOffer`
- Called when a sell order/offer is added to a vending machine
**Returns:** No return behavior
```csharp
void OnAddVendingOffer(VendingMachine machine, ProtoBuf.VendingMachine.SellOrder sellOrder)
{
Puts("OnAddVendingOffer works!");
}
```
<sub>Tags: `vending` · uMod last updated 2021-05-08</sub>
<a id="onbuyvendingitem"></a>
### `OnBuyVendingItem`
- Called when a player buys an item from a vending machine
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnBuyVendingItem(VendingMachine machine, BasePlayer player, int sellOrderId, int numberOfTransactions)
{
Puts("OnBuyVendingItem works!");
return null;
}
```
<sub>Tags: `vending` · uMod last updated 2021-05-08</sub>
<a id="ondeletevendingoffer"></a>
### `OnDeleteVendingOffer`
- Called when a sell order/offer is deleted from a vending machine
**Returns:** No return behavior
```csharp
void OnDeleteVendingOffer(VendingMachine machine, int offerId)
{
Puts("OnDeleteVendingOffer works!");
}
```
<sub>Tags: `delete`, `vending` · uMod last updated 2021-05-08</sub>
<a id="onopenvendingadmin"></a>
### `OnOpenVendingAdmin`
- Called when a player opens the admin ui for a vending machine
**Returns:** No return behavior
```csharp
void OnOpenVendingAdmin(VendingMachine machine, BasePlayer player)
{
Puts("OnOpenVendingAdmin works!");
}
```
<sub>Tags: `open`, `vending` · uMod last updated 2021-05-08</sub>
<a id="onvendingshopopened"></a>
### `OnVendingShopOpened`
- Called when a player opens the customer ui for a vending machine
**Returns:** No return behavior
```csharp
void OnVendingShopOpened(VendingMachine machine, BasePlayer player)
{
Puts("OnVendingShopOpened works!");
}
```
<sub>Tags: `open`, `vending` · uMod last updated 2022-09-12</sub>
<a id="onrefreshvendingstock"></a>
### `OnRefreshVendingStock`
- Called when the stock on a vending machine is updated
**Returns:** No return behavior
```csharp
void OnRefreshVendingStock(VendingMachine machine, Item item)
{
Puts("OnRefreshVendingStock works!");
}
```
<sub>Tags: `refresh`, `vending` · uMod last updated 2021-05-08</sub>
<a id="onrotatevendingmachine"></a>
### `OnRotateVendingMachine`
- Called when a player attempts to rotate a vending machine
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnRotateVendingMachine(VendingMachine machine, BasePlayer player)
{
Puts("OnRotateVendingMachine works!");
return null;
}
```
<sub>Tags: `rotate`, `vending` · uMod last updated 2021-05-08</sub>
<a id="ontogglevendingbroadcast"></a>
### `OnToggleVendingBroadcast`
- Called when a player toggles the broadcasting of the vending machine
**Returns:** No return behavior
```csharp
void OnToggleVendingBroadcast(VendingMachine machine, BasePlayer player)
{
Puts("OnToggleVendingBroadcast works!");
}
```
<sub>Tags: `toggle`, `vending` · uMod last updated 2021-05-08</sub>
<a id="onvendingtransaction"></a>
### `OnVendingTransaction`
- Called when a player attempts to buy an item from a vending machine
**Returns:** Returning true or false overrides default behavior
```csharp
bool OnVendingTransaction(VendingMachine machine, BasePlayer buyer, int sellOrderId, int numberOfTransactions)
{
Puts("OnVendingTransaction works!");
return true;
}
```
<sub>Tags: `vending` · uMod last updated 2021-05-08</sub>
<a id="onnpcgivesolditem"></a>
### `OnNpcGiveSoldItem`
- Called before a non-player controlled vending machine (at outpost etc.) gives the player the item they purchased.
**Returns:** Returning a non-null value overrides default behaviour.
```csharp
object OnNpcGiveSoldItem(NPCVendingMachine machine, Item soldItem, BasePlayer buyer)
{
Puts("OnNpcGiveSoldItem works!");
return null;
}
```
<sub>Tags: `vending` · uMod last updated 2021-05-10</sub>
---
## Weapon Hooks
*Firing, reloading, throwing, melee swings, projectile and trap behaviour.*
16 hooks: [`CanCreateWorldProjectile`](#cancreateworldprojectile), [`CanExplosiveStick`](#canexplosivestick), [`OnAmmoUnload`](#onammounload), [`OnExplosiveDud`](#onexplosivedud), [`OnExplosiveFuseSet`](#onexplosivefuseset), [`OnProjectileRicochet`](#onprojectilericochet), [`OnWorldProjectileCreate`](#onworldprojectilecreate), [`OnExplosiveDropped`](#onexplosivedropped), [`OnExplosiveThrown`](#onexplosivethrown), [`OnFlameThrowerBurn`](#onflamethrowerburn), [`OnMeleeThrown`](#onmeleethrown), [`OnMagazineReload`](#onmagazinereload), [`OnWeaponReload`](#onweaponreload), [`OnRocketLaunched`](#onrocketlaunched), [`OnAmmoSwitch`](#onammoswitch), [`OnWeaponFired`](#onweaponfired)
<a id="cancreateworldprojectile"></a>
### `CanCreateWorldProjectile`
- Called when the item creates a projectile in the world
**Returns:** Returning a non-null value overrides default behavior
```csharp
object CanCreateWorldProjectile(HitInfo info, ItemDefinition itemDef)
{
Puts("CanCreateWorldProjectile works!");
return null;
}
```
<sub>Tags: `create`, `weapon` · uMod last updated 2021-05-08</sub>
<a id="canexplosivestick"></a>
### `CanExplosiveStick`
- Called when a Timed Explosive is attempting to stick to another entity
**Returns:** Returning a non-null value overwrites the default behavior
```csharp
object CanExplosiveStick(TimedExplosive explosive, BaseEntity entity)
{
Puts("CanExplosiveStick works!");
return null;
}
```
<sub>Tags: `explosive`, `weapon` · uMod last updated 2023-07-12</sub>
<a id="onammounload"></a>
### `OnAmmoUnload`
- Called when a player is trying to unload ammo
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnAmmoUnload(BaseProjectile projectile, Item item, BasePlayer player)
{
Puts("OnAmmoUnload works!");
return null;
}
```
<sub>Tags: `ammo`, `weapon` · uMod last updated 2021-05-08</sub>
<a id="onexplosivedud"></a>
### `OnExplosiveDud`
- Called when explosive tries to become dud
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnExplosiveDud(DudTimedExplosive explosive)
{
Puts("OnExplosiveDud works!");
return null;
}
```
<sub>Tags: `explosive`, `weapon` · uMod last updated 2021-05-08</sub>
<a id="onexplosivefuseset"></a>
### `OnExplosiveFuseSet`
- Called when a fuse of an explosive is set
**Returns:** Returning a non-null value overwrites fuse length
```csharp
object OnExplosiveFuseSet(TimedExplosive explosive, float fuseLength)
{
Puts("OnExplosiveFuseSet works!");
return null;
}
```
<sub>Tags: `explosive`, `weapon` · uMod last updated 2021-05-08</sub>
<a id="onprojectilericochet"></a>
### `OnProjectileRicochet`
- Called when a player's weapon projectile ricochets
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnProjectileRicochet(BasePlayer player, PlayerProjectileRicochet ricochet)
{
Puts("OnProjectileRicochet works!");
return null;
}
```
<sub>Tags: `projectile`, `weapon` · uMod last updated 2021-05-08</sub>
<a id="onworldprojectilecreate"></a>
### `OnWorldProjectileCreate`
- Called when a projectile is created
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnWorldProjectileCreate(HitInfo hitInfo, Item item)
{
Puts("OnWorldProjectileCreate works!");
return null;
}
```
<sub>Tags: `create`, `weapon` · uMod last updated 2023-04-16</sub>
<a id="onexplosivedropped"></a>
### `OnExplosiveDropped`
- Called when the player drops an explosive item (C4, grenade, ...)
**Returns:** No return behavior
```csharp
void OnExplosiveDropped(BasePlayer player, BaseEntity entity, ThrownWeapon item)
{
Puts("OnExplosiveDropped works!");
}
```
<sub>Tags: `explosive`, `weapon` · uMod last updated 2021-05-08</sub>
<a id="onexplosivethrown"></a>
### `OnExplosiveThrown`
- Called when the player throws an explosive item (C4, grenade, ...)
**Returns:** No return behavior
```csharp
void OnExplosiveThrown(BasePlayer player, BaseEntity entity, ThrownWeapon item)
{
Puts("OnExplosiveThrown works!");
}
```
<sub>Tags: `explosive`, `weapon` · uMod last updated 2021-05-08</sub>
<a id="onflamethrowerburn"></a>
### `OnFlameThrowerBurn`
- Called when the burn from a flame thrower spreads
**Returns:** No return behavior
```csharp
void OnFlameThrowerBurn(FlameThrower thrower, BaseEntity flame)
{
Puts("OnFlameThrowerBurn works!");
}
```
<sub>Tags: `flame`, `weapon` · uMod last updated 2021-05-08</sub>
<a id="onmeleethrown"></a>
### `OnMeleeThrown`
- Called when the player throws a melee item (axe, rock, ...)
**Returns:** No return behavior
```csharp
void OnMeleeThrown(BasePlayer player, Item item)
{
Puts("OnMeleeThrown works!");
}
```
<sub>Tags: `melee`, `weapon` · uMod last updated 2021-05-08</sub>
<a id="onmagazinereload"></a>
### `OnMagazineReload`
- Called when the player reloads a magazine
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnMagazineReload(BaseProjectile weapon, IAmmoContainer desiredAmount, BasePlayer player)
{
Puts("OnMagazineReload works!");
return null;
}
```
<sub>Tags: `reload`, `weapon` · uMod last updated 2023-09-24</sub>
<a id="onweaponreload"></a>
### `OnWeaponReload`
- Called when the player reloads a weapon
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnWeaponReload(BaseProjectile weapon, BasePlayer player)
{
Puts("OnWeaponReload works!");
return null;
}
```
<sub>Tags: `reload`, `weapon` · uMod last updated 2022-09-12</sub>
<a id="onrocketlaunched"></a>
### `OnRocketLaunched`
- Called when the player launches a rocket
**Returns:** No return behavior
```csharp
void OnRocketLaunched(BasePlayer player, BaseEntity entity)
{
Puts("OnRocketLaunched works!");
}
```
<sub>Tags: `rocket`, `weapon` · uMod last updated 2021-05-08</sub>
<a id="onammoswitch"></a>
### `OnAmmoSwitch`
- Called when the player starts to switch the ammo in a weapon
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnAmmoSwitch(BaseProjectile weapon, BasePlayer player)
{
Puts("OnAmmoSwitch works!");
return null;
}
```
<sub>Tags: `switch`, `weapon` · uMod last updated 2023-10-11</sub>
<a id="onweaponfired"></a>
### `OnWeaponFired`
- Called when the player fires a weapon
**Returns:** No return behavior
```csharp
void OnWeaponFired(BaseProjectile projectile, BasePlayer player, ItemModProjectile mod, ProtoBuf.ProjectileShoot projectiles)
{
Puts("OnWeaponFired works!");
}
```
<sub>Tags: `weapon` · uMod last updated 2021-05-08</sub>
---
## Vehicle Hooks
*Boats, cars, horses, helicopters, trains, submarines — fuel, engines, mounting, pushing.*
22 hooks: [`CanUseHelicopter`](#canusehelicopter), [`OnBoatPathGenerate`](#onboatpathgenerate), [`OnVehicleModuleMove`](#onvehiclemodulemove), [`OnEngineStart`](#onenginestart), [`OnEngineStarted`](#onenginestarted), [`OnEngineStop`](#onenginestop), [`OnEngineStopped`](#onenginestopped), [`OnEngineStatsRefresh`](#onenginestatsrefresh), [`OnEngineStatsRefreshed`](#onenginestatsrefreshed), [`OnVehicleModuleSelect`](#onvehiclemoduleselect), [`OnVehicleModuleSelected`](#onvehiclemoduleselected), [`OnVehicleModuleDeselected`](#onvehiclemoduledeselected), [`OnHotAirBalloonToggle`](#onhotairballoontoggle), [`OnHotAirBalloonToggled`](#onhotairballoontoggled), [`OnVehicleModulesAssign`](#onvehiclemodulesassign), [`OnVehicleModulesAssigned`](#onvehiclemodulesassigned), [`OnVehiclePush`](#onvehiclepush), [`CanCheckFuel`](#cancheckfuel), [`CanUseFuel`](#canusefuel), [`OnFuelCheck`](#onfuelcheck), [`OnFuelAmountCheck`](#onfuelamountcheck), [`OnFuelItemCheck`](#onfuelitemcheck)
<a id="canusehelicopter"></a>
### `CanUseHelicopter`
- Useful for denying to mount a CH47 helicopter
**Returns:** Returning a non-null value cancels default behavior
```csharp
object CanUseHelicopter(BasePlayer player, CH47HelicopterAIController helicopter)
{
Puts("CanUseHelicopter works!");
return null;
}
```
<sub>Tags: `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onboatpathgenerate"></a>
### `OnBoatPathGenerate`
- Called when generating ocean patrol path for CargoShip
**Returns:** Returning a List<Vector3> overrides default behavior
```csharp
List<Vector3> OnBoatPathGenerate()
{
Puts("OnBoatPathGenerate works!");
return null;
}
```
<sub>Tags: `boat`, `vehicle` · uMod last updated 2021-08-14</sub>
<a id="onvehiclemodulemove"></a>
### `OnVehicleModuleMove`
- Called when a player tries to move a vehicle module item that is currently on a vehicle
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnVehicleModuleMove(BaseVehicleModule module, BaseModularVehicle vehicle, BasePlayer player)
{
Puts("OnVehicleModuleMove works!");
return null;
}
```
<sub>Tags: `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onenginestart"></a>
### `OnEngineStart`
- Called when a player tries to start a vehicle engine
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnEngineStart(BaseVehicle vehicle, BasePlayer driver)
{
Puts("OnEngineStart works!");
return null;
}
```
<sub>Tags: `engine`, `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onenginestarted"></a>
### `OnEngineStarted`
- Called right after a vehicle engine has started
**Returns:** No return behavior
```csharp
void OnEngineStarted(BaseVehicle vehicle, BasePlayer driver)
{
Puts("OnEngineStarted works!");
}
```
<sub>Tags: `engine`, `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onenginestop"></a>
### `OnEngineStop`
- Called when a vehicle engine is about to stop
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnEngineStop(BaseVehicle vehicle)
{
Puts("OnEngineStop works!");
return null;
}
```
<sub>Tags: `engine`, `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onenginestopped"></a>
### `OnEngineStopped`
- Called right after a vehicle engine has stopped
**Returns:** No return behavior
```csharp
void OnEngineStopped(BaseVehicle vehicle)
{
Puts("OnEngineStopped works!");
}
```
<sub>Tags: `engine`, `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onenginestatsrefresh"></a>
### `OnEngineStatsRefresh`
- Called right before the stats of a modular car engine are refreshed
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnEngineStatsRefresh(VehicleModuleEngine engineModule, EngineStorage engineStorage)
{
Puts("OnEngineStatsRefresh works!");
return null;
}
```
<sub>Tags: `engine`, `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onenginestatsrefreshed"></a>
### `OnEngineStatsRefreshed`
- Called right after the stats of a modular car engine are refreshed
**Returns:** No return behavior
```csharp
void OnEngineStatsRefreshed(VehicleModuleEngine engineModule, EngineStorage engineStorage)
{
Puts("OnEngineStatsRefreshed works!");
}
```
<sub>Tags: `engine`, `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onvehiclemoduleselect"></a>
### `OnVehicleModuleSelect`
- Called right after a player has selected a vehicle module item in a car inventory, but before they are shown the corresponding storage container
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnVehicleModuleSelect(Item moduleItem, ModularCarGarage carLift, BasePlayer player)
{
Puts("OnVehicleModuleSelect works!");
return null;
}
```
<sub>Tags: `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onvehiclemoduleselected"></a>
### `OnVehicleModuleSelected`
- Called right after a player has selected a vehicle module item in a car's inventory, and after they have been shown the corresponding storage container if applicable
**Returns:** No return behavior
```csharp
void OnVehicleModuleSelected(Item moduleItem, ModularCarGarage carLift, BasePlayer player)
{
Puts("OnVehicleModuleSelected works!");
}
```
<sub>Tags: `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onvehiclemoduledeselected"></a>
### `OnVehicleModuleDeselected`
- Called right after a player deselects a vehicle module item in a car's inventory
**Returns:** No return behavior
```csharp
void OnVehicleModuleDeselected(ModularCarGarage carLift, BasePlayer player)
{
Puts("OnVehicleModuleDeselected works!");
}
```
<sub>Tags: `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onhotairballoontoggle"></a>
### `OnHotAirBalloonToggle`
- Called when a player tries to toggle a hot air balloon on or off
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnHotAirBalloonToggle(HotAirBalloon balloon, BasePlayer player)
{
Puts("OnHotAirBalloonToggle works!");
return null;
}
```
<sub>Tags: `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onhotairballoontoggled"></a>
### `OnHotAirBalloonToggled`
- Called right after a player has toggled a hot air balloon on or off
**Returns:** No return behavior
```csharp
void OnHotAirBalloonToggled(HotAirBalloon balloon, BasePlayer player)
{
Puts("OnHotAirBalloonToggled works!");
}
```
<sub>Tags: `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onvehiclemodulesassign"></a>
### `OnVehicleModulesAssign`
- Called right after a modular car has spawned, but before module items are added to its inventory from a preset
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnVehicleModulesAssign(ModularCar car, ItemModVehicleModule[] modulePreset)
{
Puts("OnVehicleModulesAssign works!");
return null;
}
```
<sub>Tags: `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onvehiclemodulesassigned"></a>
### `OnVehicleModulesAssigned`
- Called right after a car has spawned and its module inventory has been filled with module items from a preset
**Returns:** No return behavior
```csharp
void OnVehicleModulesAssigned(ModularCar car, ItemModVehicleModule[] modulePreset)
{
Puts("OnVehicleModulesAssigned works!");
}
```
<sub>Tags: `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onvehiclepush"></a>
### `OnVehiclePush`
- Called when a player tries to push a vehicle
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnVehiclePush(BaseVehicle vehicle, BasePlayer player)
{
Puts("OnVehiclePush works!");
return null;
}
```
<sub>Tags: `vehicle` · uMod last updated 2021-05-08</sub>
<a id="cancheckfuel"></a>
### `CanCheckFuel`
- Called when a player tries to loot a vehicle's fuel container
**Returns:** Returning true or false overrides default behavior
```csharp
object CanCheckFuel(EntityFuelSystem fuelSystem, StorageContainer fuelContainer, BasePlayer player)
{
Puts("CanCheckFuel works!");
return null;
}
```
<sub>Tags: `check`, `vehicle` · uMod last updated 2021-05-08</sub>
<a id="canusefuel"></a>
### `CanUseFuel`
- Called before a vehicle fuel system consumes fuel
**Returns:** Returning true or false overrides default behavior
```csharp
object CanUseFuel(EntityFuelSystem fuelSystem, StorageContainer fuelContainer, float currentSeconds, float fuelPerSecond)
{
Puts("CanUseFuel works!");
return null;
}
```
<sub>Tags: `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onfuelcheck"></a>
### `OnFuelCheck`
- Called when determining whether a vehicle has sufficient fuel
**Returns:** Returning true or false overrides default behavior
```csharp
object OnFuelCheck(EntityFuelSystem fuelSystem)
{
Puts("OnFuelCheck works!");
return null;
}
```
<sub>Tags: `fuel`, `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onfuelamountcheck"></a>
### `OnFuelAmountCheck`
- Called when the amount of fuel in a vehicle is being determined
**Returns:** Returning a numeric value (int) overrides the default value
```csharp
object OnFuelAmountCheck(EntityFuelSystem fuelSystem, Item fuelItem)
{
Puts("OnFuelAmountCheck works!");
return null;
}
```
<sub>Tags: `fuel`, `vehicle` · uMod last updated 2021-05-08</sub>
<a id="onfuelitemcheck"></a>
### `OnFuelItemCheck`
- Called when determining which item should be used to fuel a vehicle
**Returns:** Returning an Item overrides default behavior
```csharp
object OnFuelItemCheck(EntityFuelSystem fuelSystem, StorageContainer fuelContainer)
{
Puts("OnFuelItemCheck works!");
return null;
}
```
<sub>Tags: `fuel`, `vehicle` · uMod last updated 2021-05-08</sub>
---
## Team Hooks
*Rust's built-in team/party system: create, invite, join, leave, promote, disband.*
12 hooks: [`OnTeamAcceptInvite`](#onteamacceptinvite), [`OnTeamCreate`](#onteamcreate), [`OnTeamCreated`](#onteamcreated), [`OnTeamDisband`](#onteamdisband), [`OnTeamDisbanded`](#onteamdisbanded), [`OnTeamInvite`](#onteaminvite), [`OnTeamKick`](#onteamkick), [`OnTeamLeave`](#onteamleave), [`OnTeamPromote`](#onteampromote), [`OnTeamRejectInvite`](#onteamrejectinvite), [`OnTeamUpdate`](#onteamupdate), [`OnTeamUpdated`](#onteamupdated)
<a id="onteamacceptinvite"></a>
### `OnTeamAcceptInvite`
- Useful for canceling team invitation acceptation
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnTeamAcceptInvite(RelationshipManager.PlayerTeam team, BasePlayer player)
{
Puts("OnTeamAcceptInvite works!");
return null;
}
```
<sub>Tags: `team` · uMod last updated 2021-05-08</sub>
<a id="onteamcreate"></a>
### `OnTeamCreate`
- Useful for canceling team creation
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnTeamCreate(BasePlayer player)
{
Puts("OnTeamCreate works!");
return null;
}
```
<sub>Tags: `team` · uMod last updated 2021-05-08</sub>
<a id="onteamcreated"></a>
### `OnTeamCreated`
- Called after a team was created
**Returns:** No return behavior
```csharp
void OnTeamCreated(BasePlayer player, RelationshipManager.PlayerTeam team)
{
Puts("OnTeamCreated works!");
}
```
<sub>Tags: `team` · uMod last updated 2021-05-08</sub>
<a id="onteamdisband"></a>
### `OnTeamDisband`
- Useful for canceling team disbandment
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnTeamDisband(RelationshipManager.PlayerTeam team)
{
Puts("OnTeamDisband works!");
return null;
}
```
<sub>Tags: `team` · uMod last updated 2021-05-08</sub>
<a id="onteamdisbanded"></a>
### `OnTeamDisbanded`
- Called when the team was disbanded
**Returns:** No return behavior
```csharp
void OnTeamDisbanded(RelationshipManager.PlayerTeam team)
{
Puts("OnTeamDisbanded works!");
}
```
<sub>Tags: `team` · uMod last updated 2021-05-08</sub>
<a id="onteaminvite"></a>
### `OnTeamInvite`
- Useful for canceling an invitation
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnTeamInvite(BasePlayer inviter, BasePlayer target)
{
Puts($"{inviter.displayName} invited {target.displayName} to his team");
return null;
}
```
<sub>Tags: `team` · uMod last updated 2021-05-08</sub>
<a id="onteamkick"></a>
### `OnTeamKick`
- Useful for canceling kick of the player from the team
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnTeamKick(RelationshipManager.PlayerTeam team, BasePlayer player, ulong target)
{
Puts("OnTeamKick works!");
return null;
}
```
<sub>Tags: `team` · uMod last updated 2021-05-08</sub>
<a id="onteamleave"></a>
### `OnTeamLeave`
- Useful for canceling the leave from the team
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnTeamLeave(RelationshipManager.PlayerTeam team, BasePlayer player)
{
Puts("OnTeamLeave works!");
return null;
}
```
<sub>Tags: `team` · uMod last updated 2021-05-08</sub>
<a id="onteampromote"></a>
### `OnTeamPromote`
- Useful for canceling player's promotion in the team
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnTeamPromote(RelationshipManager.PlayerTeam team, BasePlayer newLeader)
{
Puts("OnTeamPromote works!");
return null;
}
```
<sub>Tags: `team` · uMod last updated 2021-05-08</sub>
<a id="onteamrejectinvite"></a>
### `OnTeamRejectInvite`
- Useful for canceling the invitation rejection
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnTeamRejectInvite(BasePlayer rejector, RelationshipManager.PlayerTeam team)
{
Puts("OnTeamRejectInvite works!");
return null;
}
```
<sub>Tags: `team` · uMod last updated 2021-05-08</sub>
<a id="onteamupdate"></a>
### `OnTeamUpdate`
- Called when player's team is updated
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnTeamUpdate(ulong currentTeam, ulong newTeam, BasePlayer player)
{
Puts("OnTeamUpdate works!");
return null;
}
```
<sub>Tags: `team` · uMod last updated 2021-05-08</sub>
<a id="onteamupdated"></a>
### `OnTeamUpdated`
- Called before sending team info to player
**Returns:** Returning a non-null value cancels default behavior
```csharp
object OnTeamUpdated(ulong currentTeam, PlayerTeam playerTeam, BasePlayer player)
{
Puts("OnTeamUpdate works!");
return null;
}
```
<sub>Tags: `team` · uMod last updated 2021-05-08</sub>
---
## World Hooks
*World-level generation events.*
1 hook: [`OnWorldPrefabSpawned`](#onworldprefabspawned)
<a id="onworldprefabspawned"></a>
### `OnWorldPrefabSpawned`
- Called when a world prefab was spawned
**Returns:** No return behavior
```csharp
void OnWorldPrefabSpawned(GameObject gameObject, string category)
{
Puts("OnWorldPrefabSpawned works!");
}
```
<sub>Tags: `world` · uMod last updated 2021-05-08</sub>
---
## Fishing Hooks
*The fishing minigame.*
4 hooks: [`CanCatchFish`](#cancatchfish), [`OnFishCatch`](#onfishcatch), [`OnFishCaught`](#onfishcaught), [`OnFishingStopped`](#onfishingstopped)
<a id="cancatchfish"></a>
### `CanCatchFish`
- Called before a fish is caught
**Returns:** Returning true or false overrides default behavior
```csharp
bool? CanCatchFish(BasePlayer player, BaseFishingRod rod, Item item)
{
Puts("can we catch em fishes?");
return null;
}
```
<sub>Tags: `player`, `item`, `fishing` · uMod last updated 2021-12-15</sub>
<a id="onfishcatch"></a>
### `OnFishCatch`
- Called after a fish is caught, before the item is given
**Returns:** Returning a non-null value overrides default behavior
```csharp
Item OnFishCatch(Item item, BaseFishingRod rod, BasePlayer player)
{
Puts($"{player.displayName} has just caught {item.amount} x {item.info.shortname}!");
return null;
}
```
<sub>Tags: `player`, `item`, `fishing` · uMod last updated 2021-12-15</sub>
<a id="onfishcaught"></a>
### `OnFishCaught`
- Called after a fish is caught
**Returns:** No return behavior
```csharp
void OnFishCaught(ItemDefinition definition, BaseFishingRod rod, BasePlayer player)
{
Puts($"A fish ({definition.shortname}) has just been caught by {player.displayName}!");
}
```
<sub>Tags: `player`, `item`, `fishing` · uMod last updated 2021-12-15</sub>
<a id="onfishingstopped"></a>
### `OnFishingStopped`
- Called just after the fishing minigame has been stopped.
**Returns:** No return behaviour
```csharp
void OnFishingStopped(BaseFishingRod rod, BaseFishingRod.FailReason reason)
{
Puts("OnFishingStopped works!");
}
```
<sub>Tags: `fishing` · uMod last updated 2022-06-25</sub>
---
## Electronic Hooks
*The electricity graph.*
2 hooks: [`OnExcavatorSuppliesRequest`](#onexcavatorsuppliesrequest), [`OnExcavatorSuppliesRequested`](#onexcavatorsuppliesrequested)
<a id="onexcavatorsuppliesrequest"></a>
### `OnExcavatorSuppliesRequest`
- Called just after the excavator supply computer is triggered, before the plane is spawned.
**Returns:** Returning non-null overrides default behaviour.
```csharp
object OnExcavatorSuppliesRequest(ExcavatorSignalComputer computer, BasePlayer player)
{
Puts("OnExcavatorSuppliesRequest works!");
return null;
}
```
<sub>uMod last updated 2023-06-04</sub>
<a id="onexcavatorsuppliesrequested"></a>
### `OnExcavatorSuppliesRequested`
- Called after the excavator signal computer was triggered, just after the supply plane is spawned.
**Returns:** *(not stated upstream)*
```csharp
void OnExcavatorSuppliesRequested(ExcavatorSignalComputer computer, BasePlayer player, BaseEntity cargoPlane)
{
Puts("OnExcavatorSuppliesRequested works!");
}
```
<sub>uMod last updated 2023-06-04</sub>
---
## Clan Hooks
*The first-party clan system (distinct from Team).*
7 hooks: [`OnClanColorChanged`](#onclancolorchanged), [`OnClanCreated`](#onclancreated), [`OnClanDisbanded`](#onclandisbanded), [`OnClanLogoChanged`](#onclanlogochanged), [`OnClanMemberAdded`](#onclanmemberadded), [`OnClanMemberKicked`](#onclanmemberkicked), [`OnClanMemberLeft`](#onclanmemberleft)
<a id="onclancolorchanged"></a>
### `OnClanColorChanged`
- Called after a player changes a clan color
**Returns:** No return behavior
```csharp
void OnClanColorChanged(LocalClan clan, Color32 color, ulong steamId)
{
Puts("OnClanColorChanged works!");
}
```
<sub>Tags: `clan` · uMod last updated 2023-08-11</sub>
<a id="onclancreated"></a>
### `OnClanCreated`
- Called after a player has created a clan
**Returns:** No return behavior
```csharp
void OnClanCreated(LocalClan clan, ulong steamId)
{
Puts("OnClanCreated works!");
}
```
<sub>Tags: `clan` · uMod last updated 2023-08-11</sub>
<a id="onclandisbanded"></a>
### `OnClanDisbanded`
- Called after a player disbands a clan
**Returns:** No return behavior
```csharp
void OnClanDisbanded(LocalClan clan, ulong steamId)
{
Puts("OnClanDisbanded works!");
}
```
<sub>Tags: `clan` · uMod last updated 2023-08-11</sub>
<a id="onclanlogochanged"></a>
### `OnClanLogoChanged`
- Called after a player changes a clan logo
**Returns:** No return behavior
```csharp
void OnClanLogoChanged(LocalClan clan, byte[] logo, ulong steamId)
{
Puts("OnClanLogoChanged works!");
}
```
<sub>Tags: `clan` · uMod last updated 2023-08-11</sub>
<a id="onclanmemberadded"></a>
### `OnClanMemberAdded`
- Called after a player has accepted a clan invite
**Returns:** No return behavior
```csharp
void OnClanMemberAdded(long clanId, ulong steamId)
{
Puts("OnClanMemberAdded works!");
}
```
<sub>Tags: `clan` · uMod last updated 2023-08-11</sub>
<a id="onclanmemberkicked"></a>
### `OnClanMemberKicked`
- Called after a player has kicked another player from a clan
**Returns:** No return behavior
```csharp
void OnClanMemberKicked(LocalClan clan, ulong steamId, ulong bySteamId)
{
Puts("OnClanMemberKicked works!");
}
```
<sub>Tags: `clan` · uMod last updated 2023-08-11</sub>
<a id="onclanmemberleft"></a>
### `OnClanMemberLeft`
- Called after a player has voluntarily left a clan
**Returns:** No return behavior
```csharp
void OnClanMemberLeft(LocalClan clan, ulong steamId)
{
Puts("OnClanMemberLeft works!");
}
```
<sub>Tags: `clan` · uMod last updated 2023-08-11</sub>
---
## Plugin Hooks
*Plugin lifecycle inside Oxide itself — `Loaded`, `Unload`, and compilation.*
4 hooks: [`Loaded`](#loaded), [`LoadDefaultConfig`](#loaddefaultconfig), [`Unload`](#unload), [`LoadDefaultMessages`](#loaddefaultmessages)
<a id="loaded"></a>
### `Loaded` · *universal*
- Called when a plugin has finished loading
- Other plugins may or may not be present, dependant on load order
**Returns:** No return behavior
```csharp
void Loaded()
{
Puts("Loaded works!");
}
```
<sub>uMod last updated 2018-08-20</sub>
<a id="loaddefaultconfig"></a>
### `LoadDefaultConfig` · *universal*
- Called when the config for a plugin should be initialized
- Only called if the config file does not already exist
**Returns:** No return behavior
```csharp
protected override void LoadDefaultConfig()
{
Puts("Default configuration created");
}
```
<sub>uMod last updated 2018-08-20</sub>
<a id="unload"></a>
### `Unload` · *universal*
- Called when a plugin is being unloaded
**Returns:** No return behavior
```csharp
void Unload()
{
Puts("Save data, nullify static variables, etc.");
}
```
<sub>uMod last updated 2018-09-02</sub>
<a id="loaddefaultmessages"></a>
### `LoadDefaultMessages` · *universal*
- Called when the localization for a plugin should be registered
**Returns:** No return behavior
```csharp
protected override void LoadDefaultMessages()
{
lang.RegisterMessages(new Dictionary<string, string>
{
["Example"] = "This is an example message!",
["AnotherExample"] = "Here is another example"
}, this);
}
```
<sub>uMod last updated 2018-11-05</sub>
---
## Sign Hooks
*Sign painting, updating and locking.*
3 hooks: [`OnSignLocked`](#onsignlocked), [`OnSignUpdated`](#onsignupdated), [`OnSpinWheel`](#onspinwheel)
<a id="onsignlocked"></a>
### `OnSignLocked`
- Called after the player has locked a sign or photo frame
**Returns:** No return behavior
```csharp
void OnSignLocked(Signage sign, BasePlayer player)
{
Puts("OnSignLocked works!");
}
```
```csharp
void OnSignLocked(PhotoFrame photoFrame, BasePlayer player)
{
Puts("OnSignLocked works!");
}
```
<sub>Tags: `sign` · uMod last updated 2021-05-08</sub>
<a id="onsignupdated"></a>
### `OnSignUpdated`
- Called after the player has changed the text on a sign or updated a photo frame
**Returns:** No return behavior
```csharp
void OnSignUpdated(Signage sign, BasePlayer player, int textureIndex)
{
Puts("OnSignUpdated works!");
}
```
```csharp
void OnSignUpdated(PhotoFrame photoFrame, BasePlayer player)
{
Puts("OnSignUpdated works!");
}
```
```csharp
void OnSignUpdated(CarvablePumpkin pumpkin, BasePlayer player)
{
Puts("OnSignUpdated works!");
}
```
<sub>Tags: `sign` · uMod last updated 2022-04-18</sub>
<a id="onspinwheel"></a>
### `OnSpinWheel`
- Called when the player spins a spinner wheel
**Returns:** No return behavior
```csharp
void OnSpinWheel(BasePlayer player, SpinnerWheel wheel)
{
Puts("OnSpinWheel works!");
}
```
<sub>Tags: `spin`, `sign` · uMod last updated 2021-05-08</sub>
---
## TechTree Hooks
*Tech tree node unlocks and their prerequisites.*
4 hooks: [`CanUnlockTechTreeNode`](#canunlocktechtreenode), [`CanUnlockTechTreeNodePath`](#canunlocktechtreenodepath), [`OnTechTreeNodeUnlock`](#ontechtreenodeunlock), [`OnTechTreeNodeUnlocked`](#ontechtreenodeunlocked)
<a id="canunlocktechtreenode"></a>
### `CanUnlockTechTreeNode`
- Called when a player is attempting to unlock a blueprint in a tech tree
- Useful for bypassing unlock requirements or disallowing particular blueprints from being unlocked
**Returns:** Returning true or false overrides default behavior
```csharp
object CanUnlockTechTreeNode(BasePlayer player, TechTreeData.NodeInstance node, TechTreeData techTree)
{
Puts("CanUnlockTechTreeNode works!");
return null;
}
```
<sub>Tags: `unlock`, `techtree` · uMod last updated 2021-05-08</sub>
<a id="canunlocktechtreenodepath"></a>
### `CanUnlockTechTreeNodePath`
- Called when a player is attempting to unlock a blueprint in a tech tree, after the `CanUnlockTechTreeNode` hook, when determining whether they have the prerequisite blueprints unlocked
- Useful for customizing prerequisites without conflicting with the `CanPlayerUnlock` hook
**Returns:** Returning true or false overrides default behavior
```csharp
object CanUnlockTechTreeNodePath(BasePlayer player, TechTreeData.NodeInstance node, TechTreeData techTree)
{
Puts("CanUnlockTechTreeNodePath works!");
return null;
}
```
<sub>Tags: `unlock`, `techtree` · uMod last updated 2021-05-08</sub>
<a id="ontechtreenodeunlock"></a>
### `OnTechTreeNodeUnlock`
- Called when a player is attempting to unlock a blueprint in a tech tree, after the `CanUnlockTechTreeNode` and `CanUnlockTechTreeNodePath` hooks, before the player is charged scrap
- Useful for replacing the default behavior to charge the player a different currency, or to unlock multiple blueprints at once (such as those leading up to the one selected)
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnTechTreeNodeUnlock(Workbench workbench, TechTreeData.NodeInstance node, BasePlayer player)
{
Puts("OnTechTreeNodeUnlock works!");
return null;
}
```
<sub>Tags: `tech`, `techtree` · uMod last updated 2021-05-08</sub>
<a id="ontechtreenodeunlocked"></a>
### `OnTechTreeNodeUnlocked`
- Called after a player has unlocked a blueprint in a tech tree
- Useful for automatically unlocking blueprints for team members
**Returns:** No return behavior
```csharp
void OnTechTreeNodeUnlocked(Workbench workbench, TechTreeData.NodeInstance node, BasePlayer player)
{
Puts("OnTechTreeNodeUnlocked works!");
}
```
<sub>Tags: `tech`, `techtree` · uMod last updated 2021-05-08</sub>
---
## Phone Hooks
*In-game telephones: dialling, answering, voicemail, directory.*
12 hooks: [`OnPhoneDial`](#onphonedial), [`CanReceiveCall`](#canreceivecall), [`OnPhoneAnswer`](#onphoneanswer), [`OnPhoneAnswered`](#onphoneanswered), [`OnPhoneCallStart`](#onphonecallstart), [`OnPhoneCallStarted`](#onphonecallstarted), [`OnPhoneDialFail`](#onphonedialfail), [`OnPhoneDialFailed`](#onphonedialfailed), [`OnPhoneDialTimeout`](#onphonedialtimeout), [`OnPhoneDialTimedOut`](#onphonedialtimedout), [`OnPhoneNameUpdate`](#onphonenameupdate), [`OnPhoneNameUpdated`](#onphonenameupdated)
<a id="onphonedial"></a>
### `OnPhoneDial`
- Called when a player places a phone call
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPhoneDial(PhoneController callerPhone, PhoneController receiverPhone, BasePlayer player)
{
Puts("OnPhoneDial works!");
return null;
}
```
<sub>Tags: `phone` · uMod last updated 2021-05-08</sub>
<a id="canreceivecall"></a>
### `CanReceiveCall`
- Called when a player tries to place a phone call
**Returns:** Returning true or false overrides default behavior
```csharp
object CanReceiveCall(PhoneController receiverPhone)
{
Puts("CanReceiveCall works!");
return null;
}
```
<sub>Tags: `receive`, `phone` · uMod last updated 2021-05-08</sub>
<a id="onphoneanswer"></a>
### `OnPhoneAnswer`
- Called when a player tries to answer a phone call
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPhoneAnswer(PhoneController receiverPhone, PhoneController callerPhone)
{
Puts("OnPhoneAnswer works!");
return null;
}
```
<sub>Tags: `phone` · uMod last updated 2021-05-08</sub>
<a id="onphoneanswered"></a>
### `OnPhoneAnswered`
- Called right after a player has answered a phone call
**Returns:** No return behavior
```csharp
void OnPhoneAnswered(PhoneController receiverPhone, PhoneController callerPhone)
{
Puts("OnPhoneAnswered works!");
}
```
<sub>Tags: `phone` · uMod last updated 2021-05-08</sub>
<a id="onphonecallstart"></a>
### `OnPhoneCallStart`
- Called after a phone has been answered, right before voice communication is established
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPhoneCallStart(PhoneController phone, PhoneController otherPhone, BasePlayer player)
{
Puts("OnPhoneCallStart works!");
return null;
}
```
<sub>Tags: `phone` · uMod last updated 2021-05-08</sub>
<a id="onphonecallstarted"></a>
### `OnPhoneCallStarted`
- Called right after a phone call has been answered and voice communication has been established
**Returns:** *(not stated upstream)*
```csharp
void OnPhoneCallStarted(PhoneController phone, PhoneController otherPhone, BasePlayer player)
{
Puts("OnPhoneCallStarted works!");
}
```
<sub>Tags: `phone` · uMod last updated 2021-05-08</sub>
<a id="onphonedialfail"></a>
### `OnPhoneDialFail`
- Called when a phone call is about to end or fail to start
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPhoneDialFail(PhoneController phone, Telephone.DialFailReason reason, BasePlayer player)
{
Puts("OnPhoneDialFail works!");
return null;
}
```
<sub>Tags: `phone` · uMod last updated 2021-05-08</sub>
<a id="onphonedialfailed"></a>
### `OnPhoneDialFailed`
- Called after a phone call has ended or failed to start
**Returns:** No return behavior
```csharp
void OnPhoneDialFailed(PhoneController phone, Telephone.DialFailReason reason, BasePlayer player)
{
Puts("OnPhoneDialFailed works!");
}
```
<sub>Tags: `phone` · uMod last updated 2021-05-08</sub>
<a id="onphonedialtimeout"></a>
### `OnPhoneDialTimeout`
- Called when a phone is about to automatically hang up because the receiver phone wasn't answered in time
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPhoneDialTimeout(PhoneController callerPhone, PhoneController receiverPhone, BasePlayer player)
{
Puts("OnPhoneDialTimeout works!");
return null;
}
```
<sub>Tags: `phone` · uMod last updated 2021-05-08</sub>
<a id="onphonedialtimedout"></a>
### `OnPhoneDialTimedOut`
- Called right after a phone was automatically hung up because the receiver phone wasn't answered in time
**Returns:** No return behavior
```csharp
void OnPhoneDialTimedOut(PhoneController callerPhone, PhoneController receiverPhone, BasePlayer player)
{
Puts("OnPhoneDialTimedOut works!");
}
```
<sub>Tags: `phone` · uMod last updated 2021-05-08</sub>
<a id="onphonenameupdate"></a>
### `OnPhoneNameUpdate`
- Called when a player tries to update a phone name
**Returns:** Returning a non-null value overrides default behavior
```csharp
object OnPhoneNameUpdate(PhoneController phoneController, string name, BasePlayer player)
{
Puts("OnPhoneNameUpdate works!");
return null;
}
```
<sub>Tags: `phone` · uMod last updated 2021-05-08</sub>
<a id="onphonenameupdated"></a>
### `OnPhoneNameUpdated`
- Called after a player has updated a phone name
**Returns:** No return behavior
```csharp
void OnPhoneNameUpdated(PhoneController phoneController, string name, BasePlayer player)
{
Puts("OnPhoneNameUpdated works!");
}
```
<sub>Tags: `phone` · uMod last updated 2021-05-08</sub>
---
## Permission Hooks
*uMod's own permission/group system (Covalence) — grants, revokes, group membership.*
8 hooks: [`OnPermissionRegistered`](#onpermissionregistered), [`OnGroupPermissionGranted`](#ongrouppermissiongranted), [`OnGroupPermissionRevoked`](#ongrouppermissionrevoked), [`OnGroupCreated`](#ongroupcreated), [`OnGroupDeleted`](#ongroupdeleted), [`OnGroupRankSet`](#ongrouprankset), [`OnGroupTitleSet`](#ongrouptitleset), [`OnGroupParentSet`](#ongroupparentset)
<a id="onpermissionregistered"></a>
### `OnPermissionRegistered` · *universal*
- Called when a permission has been registered
**Returns:** No return behavior
```csharp
void OnPermissionRegistered(string name, Plugin owner)
{
Puts($"Permission '{name}' has been registered {(owner != null ? $"for {owner.Title}" : "")}");
}
```
<sub>Tags: `permission` · uMod last updated 2021-05-08</sub>
<a id="ongrouppermissiongranted"></a>
### `OnGroupPermissionGranted` · *universal*
- Called when a permission has been granted to a group
**Returns:** No return behavior
```csharp
void OnGroupPermissionGranted(string name, string perm)
{
Puts($"Group '{name}' granted permission: {perm}");
}
```
<sub>Tags: `group`, `permission` · uMod last updated 2021-05-08</sub>
<a id="ongrouppermissionrevoked"></a>
### `OnGroupPermissionRevoked` · *universal*
- Called when a permission has been revoked from a group
**Returns:** No return behavior
```csharp
void OnGroupPermissionRevoked(string name, string perm)
{
Puts($"Group '{name}' revoked permission: {perm}");
}
```
<sub>Tags: `group`, `permission` · uMod last updated 2021-05-08</sub>
<a id="ongroupcreated"></a>
### `OnGroupCreated` · *universal*
- Called when a group has been created successfully
**Returns:** No return behavior
```csharp
void OnGroupCreated(string name)
{
Puts($"Group '{name}' has been created!");
}
```
<sub>Tags: `group`, `permission` · uMod last updated 2021-05-08</sub>
<a id="ongroupdeleted"></a>
### `OnGroupDeleted` · *universal*
- Called when a group has been deleted successfully
**Returns:** No return behavior
```csharp
void OnGroupDeleted(string name)
{
Puts($"Group '{name}' has been deleted!");
}
```
<sub>Tags: `group`, `permission` · uMod last updated 2021-05-08</sub>
<a id="ongrouprankset"></a>
### `OnGroupRankSet` · *universal*
- Called when a group rank has been updated
**Returns:** No return behavior
```csharp
void OnGroupRankSet(string name, int rank)
{
Puts($"Rank '{rank}' set on group '{name}'");
}
```
<sub>Tags: `group`, `permission` · uMod last updated 2021-05-08</sub>
<a id="ongrouptitleset"></a>
### `OnGroupTitleSet` · *universal*
- Called when a group title has been updated
**Returns:** No return behavior
```csharp
void OnGroupTitleSet(string name, string title)
{
Puts($"Title '{title}' set on group '{name}'");
}
```
<sub>Tags: `group`, `permission` · uMod last updated 2021-05-08</sub>
<a id="ongroupparentset"></a>
### `OnGroupParentSet` · *universal*
- Called when a group parent has been updated
**Returns:** No return behavior
```csharp
void OnGroupParentSet(string name, string parent)
{
Puts($"Parent '{parent}' set on group '{name}'");
}
```
<sub>Tags: `group`, `permission` · uMod last updated 2021-05-08</sub>
---
<sub>Generated from uMod's own hook data (`umod.org/documentation/games/rust.json`), scraped 2026-09-15. 477 hooks.</sub>