Furniture (Floor & Wall Items)
Place Furniture + Toggle flow:
Placer (client) Server Room (all clients incl. placer)
│ │ │
│── [1258] PlaceItem ────>│ │
│ body: "12345 3 4 2" │ parse: itemId=12345, │
│ (itemId x y rotation) │ tile=(3,4), rot=2 │
│ │ validate rights + placement │
│ │ move item from inventory │
│ │ to room DB │
│ │ │
│ │── [1534] AddFloorItem ───────>│
│ │ body: full floor item entry │
│ │ including ownerName:string │
│ │ (broadcast - placer │
│ │ receives this too, same as │
│ │ [1778] bulk but single item)│
│ │ │
│── [99] ToggleFloor ────>│ │
│ body: itemId=12345, │ run interaction handler │
│ state=1 │ (e.g. turn on, switch state) │
│ │ │
│ │── [2376] ItemState ──────────>│
│ │ body: itemId:int, state:str │
│ │ (broadcast current state) │
Note on [1534] vs [1778]:
AddFloorItemhas an extra trailingownerName:stringfield that the bulkRoomFloorItems[1778] does not have. The client uses the owner name from the add-event to populate the furniture context menu ("Pick up - Owner: X") without a separate lookup. The [3776]FloorItemUpdate(sent on move/rotate) shares the same layout asAddFloorItem.Note on ToggleFloorItem vs ToggleWallItem: Both [99] and [210] read
itemId:int, state:int. The response depends on the item's interaction type - most items broadcast [2376]ItemState, but some (e.g. wired triggers) broadcast [3776]FloorItemUpdatewith the full item entry instead.
Wall position format
":w=<wallX>,<wallY> l=<localX>,<localY> <direction>"
Example: :w=3,3 l=10,55 r (right wall, column 3 row 3, local offset 10,55)
C→S 1258 - RoomPlaceItem (place from inventory)
Nitro:
FURNITURE_PLACE- Room context dropped; Item→FURNITURE. Source:RoomPlaceItemEvent,FurniturePlaceComposer
Places a furniture item from inventory into the room at a specified position and rotation.
Body:
placementData: string Format: "{itemId} {x} {y} {rotation}" for floor items
C→S 248 - RotateMoveItem
Nitro:
FURNITURE_FLOOR_UPDATE- Rotate/move→FLOOR_UPDATE (more abstract name). Source:RotateMoveItemEvent,FurnitureFloorUpdateComposer
Moves or rotates a floor furniture item to a new tile position and rotation.
Body:
itemId: int
x: int
y: int
C→S 168 - MoveWallItem
Nitro:
FURNITURE_WALL_UPDATE / ITEM_WALL_UPDATE- Move→UPDATE. Two Nitro aliases for the same packet ID. Source:MoveWallItemEvent
Moves a wall item to a new wall position.
Body:
itemId: int Wall item ID (read as int, not string)
C→S 3456 - RoomPickupItem
Nitro:
FURNITURE_PICKUPSource:
RoomPickupItemEvent,FurniturePickupComposer
| Field | Type | Notes |
|---|---|---|
| category | int | 10 = floor item, 20 = wall item |
| itemId | int | ID of the item to pick up |
Picks up (returns to inventory) a floor or wall furniture item placed in the room.
C→S 99 - ToggleFloorItem
Nitro:
FURNITURE_MULTISTATE- Toggle (verb) vs MULTISTATE (noun). Nitro treats this as a multi-state furniture, not a toggle action.Source:
ToggleFloorItemEvent,FurnitureMultiStateComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the floor item to toggle |
| state | int | New state value |
Interacts with a floor furniture item - toggles its state (e.g. on/off, next state).
C→S 210 - ToggleWallItem
Nitro:
FURNITURE_WALL_MULTISTATE / ITEM_WALL_CLICK- Two Nitro aliases. Toggle→MULTISTATE or CLICK depending on context.Source:
ToggleWallItemEvent
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the wall item to toggle |
| state | int | New state value |
Interacts with a wall furniture item - toggles its state.
C→S 3617 - UseRandomStateItem
Nitro:
FURNITURE_RANDOMSTATESource:
UseRandomStateItemEvent,FurnitureRandomStateComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the item |
| state | int | Target state index |
Activates a floor furniture item that transitions to a random state (e.g. dice roll without explicit trigger).
C→S 1990 - TriggerDice
Nitro:
ITEM_DICE_CLICKSource:
TriggerDiceEvent,FurnitureDiceActivateComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the dice item to roll |
Rolls a dice furniture item, triggering its animation and random result.
C→S 1533 - CloseDice
Nitro:
ITEM_DICE_CLOSESource:
CloseDiceEvent,FurnitureDiceDeactivateComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the dice item to close/freeze |
Notes: Triggers scripter detection if the item is not a dice or is not in the current room.
Closes (locks) a dice furniture item to fix its current face value.
C→S 2144 - TriggerColorWheel
Nitro:
ITEM_COLOR_WHEEL_CLICKSource:
TriggerColorWheelEvent,FurnitureColorWheelComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the color wheel item |
Spins a colour-wheel furniture item to select a random colour.
C→S 2765 - TriggerOneWayGate
Nitro:
ONE_WAY_DOOR_CLICKSource:
TriggerOneWayGateEvent,FurnitureOneWayDoorComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the one-way gate item |
Activates a one-way gate furniture item to open/close passage.
C→S 2813 - MoodLightSettings
Nitro:
ITEM_DIMMER_SETTINGSSource:
MoodLightSettingsEvent,MoodlightSettingsComposer
| Field | Type | Notes |
|---|---|---|
| (empty) | - | No body fields read |
Notes: Requests the current moodlight settings. Response is
ITEM_DIMMER_SETTINGS(S→C 2710).
Requests the current mood light (coloured dimmer) configuration for the room.
C→S 2296 - MoodLightTurnOn
Nitro:
ITEM_DIMMER_TOGGLESource:
MoodLightTurnOnEvent,MoodlightTogggleStateComposer
| Field | Type | Notes |
|---|---|---|
| (empty) | - | No body fields read |
Notes: Toggles the moodlight on/off; the server looks up the active item in the room.
Toggles the mood light furniture on or off.
C→S 1648 - MoodLightSaveSettings
Nitro:
ITEM_DIMMER_SAVESource:
MoodLightSaveSettingsEvent,MoodlightSettingsSaveComposer
| Field | Type | Notes |
|---|---|---|
| presetId | int | Preset slot to save (1–3) |
| backgroundOnly | int | 1 = apply to background only, 0 = full room |
| color | string | Hex color string (e.g. #FF0000) |
| brightness | int | Brightness value |
| apply | boolean | Whether to apply this preset immediately |
Saves new mood light settings (colour, brightness, background mode) to the furniture item.
C→S 2209 - MannequinSaveLook
Nitro:
MANNEQUIN_SAVE_LOOKSource:
MannequinSaveLookEvent,FurnitureMannequinSaveLookComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the mannequin furniture item |
Notes: The handler uses the interacting user's current look - no look string is sent in the packet. The mannequin copies the user's figure directly.
Saves the user's current avatar figure and gender to a mannequin furniture item.
C→S 2850 - MannequinSaveName
Nitro:
MANNEQUIN_SAVE_NAMESource:
MannequinSaveNameEvent,FurnitureMannequinSaveNameComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the mannequin item |
| name | string | New display name for the mannequin |
Saves a display name to a mannequin furniture item.
C→S 2248 - PostItPlace
Nitro:
FURNITURE_POSTIT_PLACESource:
PostItPlaceEvent,FurniturePostItPlaceComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the post-it item from inventory |
| location | string | Wall position string (e.g. :w=3,2 l=9,43 l) |
Places (creates) a new post-it sticky note on the room floor at specified coordinates.
C→S 3666 - PostItSaveData
Nitro:
SET_ITEM_DATASource:
PostItSaveDataEvent,SetItemDataMessageComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the post-it item |
| color | string | Post-it color code |
| text | string | Post-it message text (word-filtered) |
Saves text and colour data to an existing post-it sticky note.
C→S 3964 - PostItRequestData
Nitro:
GET_ITEM_DATASource:
PostItRequestDataEvent,GetItemDataComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the post-it item to read |
Requests the content of a post-it sticky note by item ID.
C→S 3336 - PostItDelete
Nitro:
REMOVE_WALL_ITEMSource:
PostItDeleteEvent,RemoveWallItemComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the post-it item to delete |
Notes: Despite the Nitro name
REMOVE_WALL_ITEM, this handler is specifically for post-it notes. Standard wall items useMoveWallItemEvent(C→S 168) /TakeBackItem(C→S 434).
Deletes a post-it sticky note from the room.
C→S 3839 - SetStackHelperHeight
Nitro:
ITEM_STACK_HELPERSource:
SetStackHelperHeightEvent,FurnitureStackHeightComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the stack tile item |
| height | int | Target stack height (divided internally, matches tile height units) |
Sets the height of the stack tile (magic tile) furniture item used to stack other items at a custom Z position.
C→S 711 - RoomPlacePaint
Nitro:
ITEM_PAINTSource:
RoomPlacePaintEvent,FurniturePlacePaintComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the paint/decoration item to apply |
Notes: Used for placing room decoration items (wallpaper, floor, landscape). The server determines which of the three slots to apply based on the item type.
Paints the room floor/wall/landscape using a decoration item in the user's inventory.
C→S 2880 - RoomBackground
Nitro:
ROOM_TONER_APPLYSource:
RoomBackgroundEvent,ApplyTonerComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the background toner item |
| hue | int | Hue adjustment (0–360) |
| saturation | int | Saturation adjustment |
| brightness | int | Brightness adjustment |
Applies a background toner / colour effect to the room. Sends RGB toner values.
C→S 924 - FootballGateSaveLook
Nitro:
SET_CLOTHING_CHANGE_DATASource:
FootballGateSaveLookEvent,SetClothingChangeDataMessageComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the football gate furniture item |
| gender | string | Gender code ("M" or "F") |
| look | string | Habbo figure string for the costume |
Saves the team colour / look to a football gate furniture item.
C→S 2941 - RoomUserGiveHandItem
Nitro:
UNIT_GIVE_HANDITEMSource:
RoomUserGiveHandItemEvent,RoomUnitGiveHandItemComposer
| Field | Type | Notes |
|---|---|---|
| userId | int | Room unit ID of the target user to give the hand item to |
Gives the hand-held item the user is currently carrying to another user in the room.
C→S 2651 - RequestGuildFurniWidget
Nitro:
FURNITURE_GROUP_INFOSource:
RequestGuildFurniWidgetEvent,FurnitureGroupInfoComposer
| Field | Type | Notes |
|---|---|---|
| (empty) | - | No body fields; server uses context from current room |
Notes: Requests guild context-menu info for the guild furniture the user is interacting with. Response is
FURNITURE_GROUP_CONTEXT_MENU_INFO(S→C 3293).
Requests guild-related data (badge, name, membership info) for a guild furniture item (e.g. guild gate, forum terminal).
C→S 3608 - AdvertisingSave
Nitro:
SET_OBJECT_DATASource:
AdvertisingSaveEvent,SetObjectDataMessageComposer
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the advertising/info-poster item |
| count | int | Number of key-value pairs that follow |
| data[] | repeated | Per entry: key:string, value:string |
Saves advertising data (URL, image) to a clickable advertising furniture item.
C→S 2768 - UnitGiveHanditemPet
Nitro:
UNIT_GIVE_HANDITEM_PETNote: No Arcturus handler - Nitro only. Source:RoomUnitGiveHandItemPetComposer
| Field | Type | Notes |
|---|---|---|
| unitId | int | Room entity ID of the pet to give the held hand item to |
Gives a hand-held item to a pet in the room.
Gives the hand item the current user is holding to a pet in the room. Nitro-only.
S→C 1778 - RoomFloorItems (bulk floor furniture)
Source:
RoomFloorItemsComposer,FurnitureFloorEvent
Delivers the bulk floor furniture list for a room at load time, including all item data and current states.
Body:
ownerCount: int
[ownerCount]:
ownerId: int
ownerName: string
itemCount: int
[itemCount floor items]:
itemId: int
spriteId: int Base item sprite ID
x: int
y: int
rotation: int 0, 2, 4, 6
z: string Z height as string
stackHeight: string Walk/sit height or "" or "1.0" for trophies
extraData: int Gift: (colorId*1000 + ribbonId), MusicDisc: songId, else: 1
extraInfo: * Limited edition: [sells:int, stack:int]; else absent
unknownInt: int Always -1
usable: int 0=not usable, 1=usable, 2=trigger type
S→C 1369 - RoomWallItems (bulk wall furniture)
Source:
RoomWallItemsComposer,FurnitureWallEvent
Delivers the bulk wall furniture list for a room at load time.
Body:
ownerCount: int
[ownerCount]:
ownerId: int
ownerName: string
itemCount: int
[itemCount wall items]:
itemId: string Wall item ID as string
spriteId: int
wallPosition: string Position in ":w=x,y l=x,y" format
extraData: string Post-it: just the color; others: extra data string
unknown: int Always -1
usable: int
S→C 1534 - AddFloorItem (single item placed)
Source:
AddFloorItemComposer,FurnitureFloorAddEvent
AddFloorItem has one extra trailing field compared to the bulk RoomFloorItems:
Notifies clients that a single floor item has been placed in the room (real-time update).
Body:
itemId: int
spriteId: int
x: int
y: int
rotation: int
z: string Z height as string
stackHeight: string Walk/sit height or "" or "1.0" for trophies
extraData: int Gift: (colorId*1000+ribbonId), MusicDisc: songId, else: 1
*[limited edition]: limitedSells:int, limitedStack:int
unknownInt: int Always -1
usable: int 0=not usable, 1=usable, 2=trigger type
ownerId: int
S→C 2187 - AddWallItem (single item placed)
Source:
AddWallItemComposer,FurnitureWallAddEvent
Same field structure as a single entry in RoomWallItems above.
S→C 3776 - FloorItemUpdate (item state change)
Source:
FloorItemUpdateComposer,FurnitureFloorUpdateEvent
Notifies clients of an updated state for a floor furniture item (e.g. after interaction).
S→C 2009 - WallItemUpdate
Source:
WallItemUpdateComposer,FurnitureWallUpdateEvent
Notifies clients of an updated state for a wall furniture item.
S→C 2376 - ItemState
Source:
ItemStateComposer,OneWayDoorStatusMessageEvent
Delivers a state-change event for a single furniture item (e.g. one-way door open/close).
Body:
itemId: int
S→C 3431 - ItemsDataUpdate
Nitro:
FURNITURE_STATE_2Source:
ItemsDataUpdate,DiceValueMessageEvent
| Field | Type | Notes |
|---|---|---|
| itemCount | int | Number of items whose data is being updated |
| itemIds[] | int[] | IDs of the updated items |
Notes: Sent when multiple items' extra-data changes simultaneously (e.g. wired effect batch update). Only sends IDs; clients must re-request item data individually.
Pushes updated extra data (state strings) for one or more furniture items currently in the room.
S→C 2547 - ItemExtraData
Source:
ItemExtraDataComposer,FurnitureDataEvent
Delivers updated extra-data (state string) for a furniture item in the room.
Body:
itemId: string
type: int
S→C 2703 - RemoveFloorItem
Source:
RemoveFloorItemComposer,FurnitureFloorRemoveEvent
Body:
itemId: string Item ID as string (e.g. "12345")
expired: boolean Always false
ownerId: int Account ID of item owner (0 if noUser flag set)
unknown: int Always 0
Notifies clients that a floor furniture item has been removed from the room.
S→C 3208 - RemoveWallItem
Source:
RemoveWallItemComposer,FurnitureWallRemoveEvent
Notifies clients that a wall furniture item has been removed from the room.
Body:
itemId: string Wall item ID as string
S→C 1474 - RoomUserHandItem
Nitro:
UNIT_HAND_ITEMSource:
RoomUserHandItemComposer,RoomUnitHandItemEvent
| Field | Type | Notes |
|---|---|---|
| roomUnitId | int | Room unit ID of the user holding the item |
| handItemId | int | ID of the held hand item (0 = empty hands) |
Notifies clients that a room user is now carrying a specific hand item (e.g. a drink or carryable).
S→C 2324 - RoomUserReceivedHandItem
Nitro:
UNIT_NUMBERSource:
FreezeLivesComposer,RoomUnitNumberEvent
| Field | Type | Notes |
|---|---|---|
| fromRoomUnitId | int | Room unit ID of the giver |
| handItemId | int | ID of the received hand item |
Notes: Nitro constant
UNIT_NUMBERappears misnamed - this composer sends hand-item-received data, not a unit number.
Notifies the recipient that they have received a hand item from another user.
S→C 1501 - PostItStickyPoleOpen
Nitro:
USER_FURNITURE_POSTIT_PLACEDSource:
UnknownFurniModelComposer,FurniturePostItPlacedEvent
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the sticky-pole item (−1234 if null) |
| unknown | string | Always empty |
Delivers the content of a post-it note to the requesting user (initial open).
S→C 2366 - PostItStickyPoleOpen (variant)
Nitro:
FURNITURE_POSTIT_STICKY_POLE_OPENSource:
PostItStickyPoleOpenComposer,RequestSpamWallPostItMessageEvent
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the sticky-pole item (−1234 if null) |
| unknown | string | Always empty |
Notes: Same composer class as S→C 1501 (
USER_FURNITURE_POSTIT_PLACED) - the same Java class sends to two different IDs depending on context.
Variant post-it open response - used for a different post-it format or second open event.
S→C 2202 - PostItData
Nitro:
FURNITURE_ITEMDATASource:
PostItDataComposer,ItemDataUpdateMessageEvent
| Field | Type | Notes |
|---|---|---|
| itemId | string | ID of the post-it item (sent as string) |
| extraData | string | The post-it's stored extra-data (color + text joined) |
Notes: Discrepancy:
itemIdis sent as a string here, unlike most item packets which use int. This is confirmed inPostItDataComposer.java.
Delivers the text and colour data of a post-it sticky note.
S→C 2710 - MoodLightData
Nitro:
ITEM_DIMMER_SETTINGSSource:
MoodLightDataComposer,RoomDimmerPresetsEvent
| Field | Type | Notes |
|---|---|---|
| presetCount | int | Always 3 |
| presets[] | repeated (3×) | Per preset: id:int, backgroundOnly:int(1=bg only/2=full), color:string, brightness:int |
| activePresetIndex | int | Currently active preset (1–3) |
| unknown | int | Always 1 |
| defaultColor | string | Always #000000 |
Delivers current mood light configuration (presets, active preset, colour, brightness, background mode) for the room.
S→C 2816 - UpdateStackHeightTileHeight
Nitro:
ITEM_STACK_HELPERSource:
UpdateStackHeightTileHeightComposer,FurnitureStackHeightEvent
| Field | Type | Notes |
|---|---|---|
| itemId | int | ID of the stack tile item |
| height | int | New height value (in tile height units) |
Updates the displayed height of a stack tile (magic tile) furniture item on a specific room tile after its height was changed.