Overview
The item_remover_device solves a common creative problem: taking items away from players at a specific moment, not just on elimination. Without it you'd have no Verse-side way to clear a player's loadout mid-round.
Typical use-cases:
- Penalty zones — a lava pit or storm wall strips weapons from anyone who walks through it.
- Round resets — clear every player's inventory before handing out a fresh loadout.
- Boss-room entry — a trigger at the door removes gadgets so players fight fair.
- Down-But-Not-Out loot drop — when a player is downed, call
Removeso teammates can scavenge their gear.
The device's Affected Items setting (configured in the UEFN editor, not in Verse) controls which item categories are removed when Remove is called. Configure that in the Details panel, then drive the when and who from Verse.
API Reference
item_remover_device
Used to cause
agents to drop or lose items from their inventory. For example, if anagentis Down But Not Out, they could drop items from their inventory, and otheragents could then pick up those items.
Full public surface, resolved verbatim from the live Epic digest (Fortnite.digest.verse).
item_remover_device<public> := class<concrete><final>(creative_device_base):
Methods (call these to make the device act):
| Method | Signature | Description |
|---|---|---|
Enable |
Enable<public>():void |
Enables this device. |
Disable |
Disable<public>():void |
Disables this device. |
Remove |
Remove<public>(Agent:agent):void |
Remove items from Agents inventory. The items that are removed can be configured using Affected Items. |
Walkthrough
Scenario: Penalty Zone — Strip Weapons When a Player Steps on a Trigger Plate
A player walks into a forbidden zone marked by a trigger_device. The moment they step on it, the item_remover_device strips their configured items. After 10 seconds the remover is disabled so late arrivals are safe (the round has moved on).
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# Place this Verse device in UEFN, then assign the two @editable fields
# in the Details panel to your placed trigger_device and item_remover_device.
penalty_zone_manager := class(creative_device):
# The trigger plate that marks the forbidden zone entrance.
@editable
PenaltyTrigger : trigger_device = trigger_device{}
# The item remover configured in the editor to strip weapons/ammo.
@editable
ItemRemover : item_remover_device = item_remover_device{}
OnBegin<override>()<suspends> : void =
# Enable the remover at round start so it is ready to act.
ItemRemover.Enable()
# Subscribe to the trigger's TriggeredEvent.
# TriggeredEvent sends ?agent, so the handler receives an optional agent.
PenaltyTrigger.TriggeredEvent.Subscribe(OnPlayerEnteredZone)
# After 10 seconds, disable the remover — late arrivals are safe.
Sleep(10.0)
ItemRemover.Disable()
# Called each time the trigger fires.
OnPlayerEnteredZone(MaybeAgent : ?agent) : void =
# Unwrap the optional agent before using it.
if (Agent := MaybeAgent?):
# Strip the configured item categories from this specific player.
ItemRemover.Remove(Agent)
Line-by-line explanation:
| Line | What it does |
|---|---|
@editable PenaltyTrigger |
Exposes the trigger slot in the UEFN Details panel so you can wire a real placed device. |
@editable ItemRemover |
Same for the item remover — configure Affected Items in the editor. |
ItemRemover.Enable() |
Arms the device at round start. A disabled remover ignores Remove calls. |
PenaltyTrigger.TriggeredEvent.Subscribe(OnPlayerEnteredZone) |
Registers our handler to run every time the plate fires. |
Sleep(10.0) |
Suspends the coroutine for 10 seconds, then disables the remover. |
if (Agent := MaybeAgent?) |
Safely unwraps the ?agent — if no agent is present the block is skipped. |
ItemRemover.Remove(Agent) |
The key call — strips the configured items from exactly this player. |
Common patterns
Pattern 1: Enable and Disable Around a Boss Fight
Enable the remover when the boss phase begins, disable it when the boss dies. Any player who enters the arena during the fight loses their gadgets; players who arrive after the fight keep theirs.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
boss_fight_controller := class(creative_device):
# Trigger wired to the boss-room door sensor.
@editable
BossRoomTrigger : trigger_device = trigger_device{}
# Item remover set to strip gadgets/utility items.
@editable
GadgetRemover : item_remover_device = item_remover_device{}
# Trigger wired to the boss elimination sensor.
@editable
BossDefeatedTrigger : trigger_device = trigger_device{}
OnBegin<override>()<suspends> : void =
# Remover starts disabled — players keep items outside the arena.
GadgetRemover.Disable()
# Subscribe to both triggers.
BossRoomTrigger.TriggeredEvent.Subscribe(OnEnterBossRoom)
BossDefeatedTrigger.TriggeredEvent.Subscribe(OnBossDefeated)
OnEnterBossRoom(MaybeAgent : ?agent) : void =
# Enable the remover so it will act on Remove() calls.
GadgetRemover.Enable()
if (Agent := MaybeAgent?):
GadgetRemover.Remove(Agent)
OnBossDefeated(MaybeAgent : ?agent) : void =
# Boss is gone — no more item stripping.
GadgetRemover.Disable()
Pattern 2: Strip All Players at Round Start
At the beginning of each round, iterate every player and call Remove so everyone starts with a clean slate before a new loadout is granted.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /Fortnite.com/Game }
round_reset_manager := class(creative_device):
# Item remover configured to strip ALL item categories.
@editable
FullStripRemover : item_remover_device = item_remover_device{}
# Trigger that fires when the round-start countdown ends.
@editable
RoundStartTrigger : trigger_device = trigger_device{}
OnBegin<override>()<suspends> : void =
FullStripRemover.Enable()
RoundStartTrigger.TriggeredEvent.Subscribe(OnRoundStart)
OnRoundStart(MaybeAgent : ?agent) : void =
# GetPlayspace() lets us reach all active players.
AllPlayers := GetPlayspace().GetPlayers()
for (Player : AllPlayers):
# Remove items from every player, not just the one who hit the trigger.
FullStripRemover.Remove(Player)
Pattern 3: Timed Disarm Trap
A trap tile strips items from anyone who stands on it, but only while it is active. A second trigger re-enables it after a cooldown, creating a pulsing hazard.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
disarm_trap := class(creative_device):
# The pressure plate that activates the trap.
@editable
TrapPlate : trigger_device = trigger_device{}
# Item remover set to strip weapons only.
@editable
WeaponRemover : item_remover_device = item_remover_device{}
# How long (seconds) the trap stays inactive after firing.
@editable
CooldownSeconds : float = 5.0
OnBegin<override>()<suspends> : void =
WeaponRemover.Enable()
TrapPlate.TriggeredEvent.Subscribe(OnTrapTriggered)
OnTrapTriggered(MaybeAgent : ?agent) : void =
if (Agent := MaybeAgent?):
WeaponRemover.Remove(Agent)
# Disable during cooldown so rapid re-triggers don't fire.
WeaponRemover.Disable()
spawn{ ReenableTrap() }
ReenableTrap()<suspends> : void =
Sleep(CooldownSeconds)
WeaponRemover.Enable()
Gotchas
1. Remove silently does nothing when the device is Disabled
If you call Remove(Agent) while the device is in the Disabled state, no items are removed and no error is raised. Always call Enable() before expecting Remove to act — or structure your logic so the device is enabled by default and only disabled when you want a safe window.
2. Which items are removed is an editor setting, not a Verse parameter
Remove(Agent) has no item-type argument. The categories stripped (weapons, ammo, consumables, etc.) are set in the Affected Items option in the UEFN Details panel. If nothing seems to be removed, double-check that setting first.
3. Always unwrap ?agent before passing to Remove
trigger_device.TriggeredEvent delivers a ?agent (optional). Passing an unwrapped optional directly to Remove is a type error. Use if (Agent := MaybeAgent?): to unwrap safely:
# WRONG — type mismatch
ItemRemover.Remove(MaybeAgent) # MaybeAgent is ?agent, not agent
# CORRECT
if (Agent := MaybeAgent?):
ItemRemover.Remove(Agent)
4. GetPlayspace().GetPlayers() returns []player, which satisfies agent
When iterating all players, player is a subtype of agent, so you can pass each Player directly to Remove(Player) without any cast.
5. Disable does not undo a removal that already happened
Calling Disable() after Remove() has fired does not restore stripped items. Items are gone the moment Remove executes. If you need a restore mechanic, pair this device with an item_granter_device to re-award items explicitly.