Multiplayer Packet Structure
Individual packets used by the multiplayer protocol
Connect Request [1]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
? | Version | String | "Terraria" + Main.curRelease |
Disconnect [2]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
? | Reason | String | - |
Continue Connecting [3]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
Player Info [4]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | Skin Varient | Byte | - |
1 | Hair | Byte | If >134 then Set To 0 |
? | Name | String | - |
1 | Hair Dye | Byte | - |
1 | Hide Visuals | Byte | - |
1 | Hide Visuals 2 | Byte | - |
1 | Hide Misc | Byte | - |
3 | Hair Color | Color | - |
3 | Skin Color | Color | - |
3 | Eye Color | Color | - |
3 | Shirt Color | Color | - |
3 | Under Shirt Color | Color | - |
3 | Pants Color | Color | - |
3 | Shoe Color | Color | - |
1 | Difficulty | Byte | - |
Player Inventory Slot [5]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | Slot ID | Byte | 0 - 58 = Inventory, 59 - 78 = Armor, 79 - 88 = Dye, 89 - 93 MiscEquips, 94 - 98 = MiscDyes, 99 - 138 = Piggy bank, 139-178 = Safe, 179 = Trash |
2 | Stack | Int16 | - |
1 | Prefix | Byte | - |
2 | Item NetID | Int16 | - |
Continue Connecting2 [6]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
World Info [7]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
4 | Time | Int32 | - |
1 | Day and Moon Info | Byte | BitFlags: 1 = Day Time, 2 = Blood Moon, 4 = Eclipse |
1 | Moon Phase | Byte | - |
2 | MaxTilesX | Int16 | - |
2 | MaxTilesY | Int16 | - |
2 | SpawnX | Int16 | - |
2 | SpawnY | Int16 | - |
2 | WorldSurface | Int16 | - |
2 | RockLayer | Int16 | - |
4 | WorldID | Int32 | - |
? | World Name | String | - |
? | World Unique ID | 16 Bytes | - |
? | World Generation Version | UInt64 | - |
1 | Moon Type | Byte | - |
1 | Tree Background | Byte | - |
1 | Corruption Background | Byte | - |
1 | Jungle Background | Byte | - |
1 | Snow Background | Byte | - |
1 | Hallow Background | Byte | - |
1 | Crimson Background | Byte | - |
1 | Desert Background | Byte | - |
1 | Ocean Background | Byte | - |
1 | Ice Back Style | Byte | - |
1 | Jungle Back Style | Byte | - |
1 | Hell Back Style | Byte | - |
4 | Wind Speed Set | Single | - |
1 | Cloud Number | Byte | - |
4 | Tree 1 | Int32 | - |
4 | Tree 2 | Int32 | - |
4 | Tree 3 | Int32 | - |
1 | Tree Style 1 | Byte | - |
1 | Tree Style 2 | Byte | - |
1 | Tree Style 3 | Byte | - |
1 | Tree Style 4 | Byte | - |
4 | Cave Back 1 | Int32 | - |
4 | Cave Back 2 | Int32 | - |
4 | Cave Back 3 | Int32 | - |
1 | Cave Back Style 1 | Byte | - |
1 | Cave Back Style 2 | Byte | - |
1 | Cave Back Style 3 | Byte | - |
1 | Cave Back Style 4 | Byte | - |
4 | Rain | Single | - |
1 | Event Info | Byte | BitFlags: 1 = Shadow Orb Smashed, 2 = Downed Boss 1, 4 = Downed Boss 2, 8 = Downed Boss 3, 16 = Hard Mode, 32 = Downed Clown, 64 = Server Side Character, 128 = Downed Plant Boss |
1 | Event Info 2 | Byte | BitFlags: 1 = Mech Boss Downed, 2 = Mech Boss Downed 2, 4 = Mech Boss Downed 3, 8 = Mech Boss Any Downed, 16 = Cloud BG, 32 = Crimson, 64 = Pumpkin Moon, 128 = Snow Moon |
1 | Event Info 3 | Byte | BitFlags: 1 = Expert Mode, 2 = FastForwardTime, 3 = Slime Rain, 4 = Downed Slime King, 5 = Downed Queen Bee, 6 = Downed Fishron, 7 = Downed Martians, 8 = Downed Ancient Cultist |
1 | Event Info 4 | Byte | BitFlags: 1 = Downed Moon Lord, 2 = Downed Pumking, 3 = Downed Mourning Wood, 4 = Downed Ice Queen, 5 = Downed Santank, 6 = Downed Everscream, 7 = Downed Golem, 8 = Birthday Party |
1 | Event Info 5 | Byte | BitFlags: 1 = Downed Pirates, 2 = Downed Frost Legion, 3 = Downed Goblins, 4 = Sandstorm, 5 = DD2 Event, 6 = Downed DD2 Tier 1, 7 = Downed DD2 Tier 2, 8 = Downed DD2 Tier 3 |
1 | Invasion Type | SByte | - |
8 | Lobby ID | UInt64 | - |
Get Section [8]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
4 | X | Int32 | If -1 Send spawn area tile sections |
4 | Y | Int32 | If -1 Send spawn area tile sections |
Status [9]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
4 | StatusMax | Int32 | Status only increases |
? | StatusText | String | - |
Send Section [10]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
1 | Compressed | Boolean | - |
4 | X Start | Int32 | - |
4 | Y Start | Int32 | - |
2 | Width | Int16 | - |
2 | Height | Int16 | - |
? | Tiles | - | |
2 | Chest Count | Int16 | - |
? | Chests | - | |
2 | Sign Count | Int16 | - |
? | Signs | - | |
2 | TileEntity Count | Int16 | - |
? | TileEntities | - | - |
Section Tile Frame [11]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | StartX | Int16 | - |
2 | StartY | Int16 | - |
2 | EndX | Int16 | - |
2 | EndY | Int16 | - |
Spawn Player [12]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
2 | SpawnX | Int16 | - |
2 | SpawnY | Int16 | - |
Update Player [13]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | Control | Byte | BitFlags: ControlUp = 1, ControlDown = 2, ControlLeft = 4, ControlRight = 8, ControlJump = 16, ControlUseItem = 32, Direction = 64 |
1 | Pulley | Byte | BitFlags: 0 = None, 1 = Direction, 2 = Direction, 4 = Update Velocity, 8 = Vortex Stealth Active, 16 = Gravity Direction, 32 = Shield Raised |
1 | SelectedItem | Byte | - |
4 | PositionX | Single | - |
4 | PositionY | Single | - |
4 | VelocityX | Single | Not sent if Update Velocity is not set |
4 | VelocityY | Single | Not sent if Update Velocity is not set |
Player Active [14]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | Active | Boolean | - |
Null [15]
Never sent
Size | Description | Type | Notes |
---|
Player HP [16]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
2 | HP | Int16 | - |
2 | Max HP | Int16 | - |
Modify Tile [17]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Action | Byte | Values: 0 = KillTile, 1 = PlaceTile, 2 = KillWall, 3 = PlaceWall, 4 = KillTileNoItem, 5 = PlaceWire, 6 = KillWire, 7 = PoundTile, 8 = PlaceActuator, 9 = KillActuator, 10 = PlaceWire2, 11 = KillWire2, 12 = PlaceWire3, 13 = KillWire3, 14 = SlopeTile, 15 = FrameTrack, 16 = PlaceWire4, 17 = KillWire4, 18 = PokeLogicGate, 19 = Actuate |
2 | TileX | Int16 | - |
2 | TileY | Int16 | - |
2 | Var1 | Int16 | KillTile (Fail: Bool), PlaceTile (Type: Byte), KillWall (Fail: Bool), PlaceWall (Type: Byte), KillTileNoItem (Fail: Bool), SlopeTile (Slope: Byte) |
1 | Var2 | Byte | Var2: PlaceTile (Style: Byte) |
Time [18]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
1 | DayTime | Boolean | - |
4 | TimeValue | Int32 | - |
2 | SunModY | Int16 | - |
2 | MoonModY | Int16 | - |
Door Toggle [19]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Action | Byte | 0 = Open Door, 1 = Close Door, 2 = Open Trapdoor, 3 = Close Trapdoor, 4 = Open Tall Gate, 5 = Close Tall Gate |
2 | TileX | Int16 | - |
2 | TileY | Int16 | - |
1 | Direction | Byte | If (Action == 0) then (if (Direction == -1) then OpenToLeft else OpenToRight) if (Action == 2) then (if (Direction == 1) then PlayerIsAboveTrapdoor) if (Action == 3) then (if (Direction == 1) then PlayerIsAboveTrapdoor) |
Send Tile Square [20]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | Player ID | UInt16 | - |
1 | TileChangeType | Byte | Only if != 0 |
2 | Size | Int16 | - |
2 | TileX | Int16 | - |
2 | TileY | Int16 | - |
? | Tiles | - |
Update Item Drop [21]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | ItemID | Int16 | If below 400 and NetID 0 Then Set NullIf ItemID is 400 Then New Item |
4 | PositionX | Single | - |
4 | PositionY | Single | - |
4 | VelocityX | Single | - |
4 | VelocityY | Single | - |
2 | Stack Size | Int16 | - |
1 | Prefix | Byte | - |
1 | NoDelay | Byte | If 0 then ownIgnore = 0 and ownTime = 100 |
2 | Item NetID | Int16 | - |
Update Item Owner [22]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | ItemID | Int16 | - |
1 | Player ID | Byte | - |
NPC Update [23]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | NPC ID | Int16 | - |
4 | PositionX | Single | - |
4 | PositionY | Single | - |
4 | VelocityX | Single | - |
4 | VelocityY | Single | - |
2 | Target | UInt16 | Player ID |
1 | Flags | Byte | BitFlags: 1 = Direction, 2 = DirectionY, 4 = AI[0], 8 = AI[1], 16 = AI[2], 32 = AI[3], 64 = SpriteDirection, 128 = LifeMax |
? | AI[?] | Single[] | Requires the AI flag to be set in order to be sent down the wire |
2 | NPC NetID | Int16 | - |
1 | LifeBytes | Byte | The size in bytes of Life, only present if !Flags[7] (LifeMax) |
? | Life | Byte or Int16 or Int32 | Only present if !Flags[7] (LifeMax) |
1 | ReleaseOwner | Byte | Only present if NPC is catchable |
Strike NPCwith Held Item [24]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | NPC ID | Int16 | - |
1 | Player ID | Byte | - |
Chat Message [25]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | If 255 Then No Name |
3 | Message Color | Color | Client cannot change colors |
? | Message | String | - |
Player Damage [26]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | Hit Direction | Byte | - |
2 | Damage | Int16 | - |
? | Death Text | String | - |
1 | Flags | Byte | BitFlags: 1 = PVP, 2 = Crit, 4 = CooldownCountdown Is -1, 8 = CooldownCountdown is 1 (Overrides previous flag), 16 = CooldownCountdown is 2 |
Projectile Update [27]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | ProjectileID | Int16 | - |
4 | PositionX | Single | - |
4 | PositionY | Single | - |
4 | VelocityX | Single | - |
4 | VelocityY | Single | - |
4 | KnockBack | Single | - |
2 | Damage | Int16 | - |
1 | Owner | Byte | Player ID |
2 | Type | Int16 | - |
1 | AIFlags | Byte | BitFlags: 0 = AI[0] is Present, 1 = AI[1] is Present, 2 = Needs UUID |
4 | AI0 | Single | Requires the AI0 flag to be set in order to be sent down the wire |
4 | AI1 | Single | Requires the AI1 flag to be set in order to be sent down the wire |
2 | ProjUUID | Int16 | Requires the Needs UUID flag to be set in order to be sent down the wire |
NPC Strike [28]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | NPC ID | Int16 | - |
2 | Damage | Int16 | -1 = Kill |
4 | Knockback | Single | - |
1 | Direction | Byte | - |
1 | Crit | Boolean | - |
Destroy Projectile [29]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | Projectile ID | Int16 | - |
1 | Owner | Byte | Player ID |
Toggle P V P [30]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | PVP Enabled | Boolean | - |
Get Chest Contents [31]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
2 | TileX | Int16 | - |
2 | TileY | Int16 | - |
Chest Item [32]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | Chest ID | Int16 | - |
1 | ItemSlot | Byte | - |
2 | Stack | Int16 | - |
1 | Prefix | Byte | - |
2 | Item Net ID | Int16 | - |
Set Chest Name [33]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | Chest ID | Int16 | - |
2 | ChestX | Int16 | - |
2 | ChestY | Int16 | - |
1 | Name Length | Byte | - |
? | Chest Name | String | Only if length > 0 && <= 20 |
PlaceChest [34]
Server <-> Client
Size | Description | Type | Notes |
---|---|---|---|
1 | ID | Byte | BitFlags:0 = Place Chest, 1 = Kill Chest, 2 = Place Dresser, 3 = Kill Dresser |
2 | TileX | Int16 | - |
2 | TileY | Int16 | - |
2 | Style | Int16 | FrameX(Chest type) |
2 | Chest ID to destroy | Int16 | Only if client is receiving packet |
Heal Effect [35]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
2 | Heal Amount | Int16 | - |
Player Zone [36]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | Zone1 | Byte | 1 = Dungeon, 2 = Corruption, 4 =Holy, 8 = Meteor, 16 = Jungle, 32 = Snow, 64 = Crimson, 128 = Water Candle |
1 | Zone2 | Byte | 1 = Peace Candle, 2 = Solar Tower, 4 = Vortex Tower, 8 = Nebula Tower, 16 = Stardust Tower, 32 = Desert, 64 = Glowshroom, 128 = Underground Desert |
1 | Zone3 | Byte | 1 = Overworld, 2 = Dirt Layer, 4 = Rock Layer, 8 = Underworld, 16 = Beach, 32 = Rain, 64 = Sandstorm |
1 | Zone4 | Byte | 1 = Old One's Army |
Request Password [37]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
Send Password [38]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
? | Password | String | - |
Remove Item Owner [39]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | ItemIndex | Int16 | - |
Set Active NPC [40]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
2 | Npc Talk Target | Int16 | - |
Player Item Animation [41]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
4 | Item Rotation | Single | - |
2 | Item Animation | Int16 | - |
Player Mana [42]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
2 | Mana | Int16 | - |
2 | Max Mana | Int16 | - |
Mana Effect [43]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
2 | Mana Amount | Int16 | - |
Player Death [44]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | HitDirection | Byte | - |
2 | Damage | Int16 | - |
1 | PVP | Boolean | - |
? | DeathText | String | - |
Player Team [45]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | Team | Byte | - |
Request Sign [46]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
2 | X | Int16 | - |
2 | Y | Int16 | - |
Update Sign [47]
Updates sign if sent from client otherwise displays sign to client.
Size | Description | Type | Notes |
---|---|---|---|
2 | Sign ID | Int16 | - |
2 | X | Int16 | - |
2 | Y | Int16 | - |
? | Text | String | - |
1 | Player ID | Byte | - |
Set Liquid [48]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | X | Int16 | - |
2 | Y | Int16 | - |
1 | Liquid | Byte | Values: 255 = Placed |
1 | Liquid Type | Byte | Values: 0 = Water, 1 = Lava, 2 = Honey |
Complete Connection and Spawn [49]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
- | - |
Update Player Buff [50]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 * 22 | BuffType | Byte[22] |
Special NPC Effect [51]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | Type | Byte | Values: 1 = Spawn Skeletron, 2 = Cause sound at player, 3 = Start Sundialing (Only works if server is receiving), 4 = BigMimcSpawnSmoke |
Unlock [52]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Type | Byte | Values: 1 = Chest Unlock, 2 = Door Unlock |
2 | X | Int16 | - |
2 | Y | Int16 | - |
Add NPC Buff [53]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | NPC ID | Int16 | - |
1 | Buff | Byte | - |
2 | Time | Int16 | - |
Update NPC Buff [54]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | NPC ID | Int16 | - |
1 | Buff ID | Byte | - |
2 | Time | Int16 | - |
Add Player Buff [55]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | Buff | Byte | - |
2 | Time | Int16 | - |
Update NPC Name [56]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | NPC ID | Int16 | - |
? | Name | String | Read-only from the client |
Update Good Evil [57]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
1 | Good | Byte | - |
1 | Evil | Byte | - |
1 | Crimson | Byte | - |
Play Music Item [58]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
4 | Note | Single | - |
Hit Switch [59]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | X | Int16 | - |
2 | Y | Int16 | - |
NPC Home Update [60]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | NPC ID | Int16 | - |
2 | HomeTileX | Int16 | - |
2 | HomeTileY | Int16 | - |
1 | Homeless | Byte | - |
Spawn Boss Invasion [61]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
2 | Player ID | Int16 | - |
2 | Type | Int16 | Negative Values: -1 = GoblinInvasion, -2 = FrostInvasion, -3 = PirateInvasion, -4 = PumpkinMoon, -5 = SnowMoon, -6 = Eclipse, -7 = Martian Moon Positive Values: Spawns any of these NPCs:4,13,50,126,125,134,127,128,131,129,130,222,245,266,370,75,398,439,493,507,422,517 |
Player Dodge [62]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | Flag | Byte | 1 = Ninja Dodge 2 = Shadow Dodge |
Paint Tile [63]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | X | Int16 | - |
2 | Y | Int16 | - |
1 | Color | Byte | - |
Paint Wall [64]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | X | Int16 | - |
2 | Y | Int16 | - |
1 | Color | Byte | - |
Player NPC Teleport [65]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Flags | Byte | BitFlags: 0 = Player Teleport (Neither 1 or 2), 1 = NPC Teleport, 2 = Player Teleport to Other Player, 4 = Style += 1, 8 = Style += 2 |
2 | Target ID | Int16 | - |
4 | X | Single | - |
4 | Y | Single | - |
Heal Other Player [66]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
2 | Heal Amount | Int16 | - |
Placeholder [67]
Does not exist in the official client. Exists solely for the purpose of being used by custom clients and servers.
Size | Description | Type | Notes |
---|---|---|---|
- | - |
Client UUID [68]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
? | UUID | String |
Get Chest Name [69]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | Chest ID | Int16 | - |
2 | Chest X | Int16 | - |
2 | Chest Y | Int16 | - |
? | Name | String | Only when Server->Client |
Catch NPC [70]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
2 | NPC ID | Int16 | - |
1 | Who | Byte | - |
Release NPC [71]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
4 | X | Int32 | - |
4 | Y | Int32 | - |
2 | NPC Type | Int16 | - |
1 | Style | Byte | Sent to NPC AI[2] |
Travelling Merchant Inventory [72]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2*40 | Items | Int16[40] | Each int corresponds to an inventory slot and item type NetID. |
Teleportation Potion [73]
Server <-> Client
Size | Description | Type | Notes |
---|
Angler Quest [74]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
1 | Quest | Byte | - |
1 | Completed | Boolean | - |
Complete Angler Quest Today [75]
Client -> Server
Size | Description | Type | Notes |
---|
Number Of Angler Quests Completed [76]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
4 | Angler Quests Completed | Int32 | - |
Create Temporary Animation [77]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | AnimationType | Int16 | - |
2 | TileType | UInt16 | - |
2 | X | Int16 | - |
2 | Y | Int16 | - |
Report Invasion Progress [78]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
4 | Progress | Int32 | - |
4 | MaxProgress | Int32 | - |
1 | Icon | SByte | - |
1 | Wave | SByte | - |
Place Object [79]
Server <-> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | X | Int16 | - |
2 | Y | Int16 | - |
2 | Type | Int16 | - |
2 | Style | Int16 | - |
1 | Alternate | Byte | - |
1 | Random | SByte | - |
1 | Direction | Boolean | - |
Sync Player Chest Index [80]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
1 | Player | Byte | - |
2 | Chest | Int16 | - |
Create Combat Text [81]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
4 | X | Single | - |
4 | Y | Single | - |
3 | Color | Color | - |
? | Text | String | - |
Load Net Module [82]
Not used
Size | Description | Type | Notes |
---|
Set NPC Kill Count [83]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | NPC Type | Int16 | - |
4 | Kill Count | Int32 | - |
Set Player Stealth [84]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player | Byte | - |
4 | Stealth | Single | - |
Force Item Into Nearest Chest [85]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
1 | Inventory Slot | Byte | - |
Update Tile Entity [86]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
4 | Key | Int32 | - |
1 | Remove? | Boolean | - |
1 | TileEntity Type | Byte | If Remove? == false |
4 | ID | Int32 | If Remove? == false |
2 | X | Int16 | If Remove? == false |
2 | Y | Int16 | If Remove? == false |
2 | NPC | Int16 | If Remove? == false && Type = 0 |
2 | ItemType | Int16 | If Remove? == false |
1 | Prefix | Byte | If Remove? == false |
2 | Stack | Int16 | If Remove? == false |
Place Tile Entity [87]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
2 | X | Int16 | - |
2 | Y | Int16 | - |
1 | Type | Byte | 2 = Logic Sensor 1 = Item Frame 0 = Training Dummy |
Alter Item Drop [88]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | Item Index | Int16 | - |
1 | Flags1 | Byte | BitFlags: 1 = Color, 2 = Damage, 4 = Knockback, 8 = UseAnimation, 16 = UseTime, 32 = Shoot, 64 = ShootSpeed, 128 = NextFlags |
4 | Packed Color Value | UInt32 | if Flags1.Color |
2 | Damage | UInt16 | if Flags1.Damage |
4 | Knockback | Single | if Flags1.Knockback |
2 | Use Animation | UInt16 | if Flags1.UseAnimation |
2 | Use Time | UInt16 | if Flags1.UseTime |
2 | Shoot | Int16 | if Flags1.Shoot |
4 | Shoot Speed | Float | if Flags1.ShootSpeed |
1 | Flags2 | Byte | if Flags1.NextFlags BitFlags: 1 = Width, 2 = Height, 4 = Scale, 8 = Ammo, 16 = UseAmmo, 32 = NotAmmo |
2 | Width | Int16 | if Flags2.Width |
2 | Height | Int16 | if Flags2.Height |
4 | Scale | Float | if Flags2.Scale |
2 | Ammo | Int16 | If Flags2.Ammo |
2 | UseAmmo | Int16 | If Flags2.UseAmmo |
1 | NotAmmo | Bool | If Flags2.NotAmmo |
Place Item Frame [89]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
2 | X | Int16 | - |
2 | Y | Int16 | - |
2 | Item Id | Int16 | - |
1 | Prefix | Byte | - |
2 | Stack | Int16 | - |
Update Item Drop 2 [90]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | ItemID | Int16 | If below 400 and NetID 0 Then Set NullIf ItemID is 400 Then New Item |
4 | PositionX | Single | - |
4 | PositionY | Single | - |
4 | VelocityX | Single | - |
4 | VelocityY | Single | - |
2 | Stack Size | Int16 | - |
1 | Prefix | Byte | - |
1 | NoDelay | Byte | If 0 then ownIgnore = 0 and ownTime = 100 |
2 | Item NetID | Int16 | - |
Sync Emote Bubble [91]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
4 | Emote ID | Int32 | - |
1 | Anchor Type | Byte | If AnchorType > 255 then the emote is removed |
2 | MetaData | UInt16 | - |
1 | Lifetime | Byte | - |
1 | Emote | Byte | - |
2 | MetaData | Int16 | Only sent if Emote < 0 |
Sync Extra Value [92]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
2 | NPC Index | Int16 | - |
4 | ExtraValue | Single | - |
4 | X | Single | - |
4 | Y | Single | - |
Social Handshake [93]
Not used
Size | Description | Type | Notes |
---|
Deprecated [94]
Not used
Size | Description | Type | Notes |
---|
Kill Portal [95]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
2 | Projectile Index | UInt16 | - |
Player Teleport Through Portal [96]
Server <-> Client
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
2 | Portal Color Index | Int16 | - |
4 | New Position X | Single | - |
4 | New Position Y | Single | - |
4 | Velocity X | Single | - |
4 | Velocity Y | Single | - |
Notify Player NPC Killed [97]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | NPC ID | Int16 | - |
Notify Player Of Event [98]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | Event ID | Int16 | - |
Update Minion Target [99]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
4 | Target X | Single | - |
4 | Target Y | Single | - |
NPC Teleport Through Portal [100]
Server <-> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | NPC ID | UInt16 | - |
2 | Portal Color Index | Int16 | - |
4 | New Position X | Single | - |
4 | New Position Y | Single | - |
4 | Velocity X | Single | - |
4 | Velocity Y | Single | - |
Update Shield Strengths [101]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | Solar Tower Shield | UInt16 | - |
2 | Vortex Tower Shield | UInt16 | - |
2 | Nebula Tower Shield | UInt16 | - |
2 | Stardust Tower Shield | UInt16 | - |
Nebula Level Up Request [102]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
1 | Level Up Type | Byte | - |
4 | Origin X | Single | In world coordinate pixels. |
4 | Origin Y | Single | In world coordinate pixels. |
Update Moon Lord Countdown [103]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
4 | Moon Lord Countdown | Int32 | - |
Set NPC Shop Item [104]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
1 | Slot | Byte | - |
2 | Item Type | Int16 | - |
2 | Stack | Int16 | - |
1 | Prefix | Byte | - |
4 | Value | Int32 | - |
1 | Flags | Byte | BitFlags: 1 = BuyOnce |
Toggle Gem Lock [105]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
2 | X | Int16 | - |
2 | Y | Int16 | - |
1 | On | Boolean | - |
Poof of Smoke [106]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
4 | PackedVector | Int32 | Two Int16's packed into 4 bytes. |
Chat Message v2 [107]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | If 255 Then No Name |
3 | Message Color | Color | Client cannot change colors |
? | Message | String | - |
2 | Message Length | Int16 |
Wired Cannon Shot [108]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | Damage | Int16 | - |
4 | Knockback | Single | - |
2 | X | Int16 | - |
2 | Y | Int16 | - |
2 | Angle | Int16 | - |
2 | Ammo | Int16 | - |
1 | Player ID | Byte | Shooter's Player ID |
Mass Wire Operation [109]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
2 | Start X | Int16 | - |
2 | Start Y | Int16 | - |
2 | End X | Int16 | - |
2 | End Y | Int16 | - |
1 | ToolMode | Byte | BitFlags: 1 = Red, 2 = Green, 4 = Blue, 8 = Yellow, 16 = Actuator, 32 = Cutter |
Mass Wire Operation Consume [110]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
2 | Item Type | Int16 | - |
2 | Quantity | Int16 | - |
1 | Player ID | Byte | - |
Toggle Birthday Party [111]
Client -> Server
Size | Description | Type | Notes |
---|
GrowFX [112]
Server <-> Client (Sync)
Size | Description | Type | Notes |
---|---|---|---|
1 | GrowEffect | Boolean | - |
2 | X | Int16 | - |
2 | Y | Int16 | - |
1 | Height | Byte | - |
CrystalInvasionStart [113]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
2 | X | Int16 | - |
2 | Y | Int16 | - |
CrystalInvasionWipeAll [114]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
- | - | - | - |
MinionAttackTargetUpdate [115]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
2 | Minion Attack Targert | Int16 | - |
CrystalInvasionSendWaitTime [116]
Server -> Client
Size | Description | Type | Notes |
---|---|---|---|
4 | Time Until Next Wave | Int | 1800 (30s) between waves, 30 (5s) when starting |
PlayerHurtV2 [117]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
? | Player Death Reason | PlayerDeathReason | - |
2 | Damage | Int16 | - |
1 | Hit Direction | Byte | - |
1 | Flags | Byte | BitFlags: 1 = Crit, 2 = PvP |
1 | Cooldown Counter | Byte | - |
PlayerDeathV2 [118]
Client -> Server
Size | Description | Type | Notes |
---|---|---|---|
1 | Player ID | Byte | - |
? | Player Death Reason | PlayerDeathReason | - |
2 | Damage | Int16 | - |
1 | Hit Direction | Byte | - |
1 | Flags | Byte | BitFlags: 1 = PvP |
Appendix
Color Structure
Size | Description | Type | Notes |
---|---|---|---|
1 | Red | Byte | - |
1 | Green | Byte | - |
1 | Blue | Byte | - |
Tile Structure
Size | Description | Type | Notes |
---|---|---|---|
1 | Flags1 | Byte | BitFlags: 1= Active, 2= Lighted, 4 = HasWall, 8 = HasLiquid, 16 = Wire1, 32 = HalfBrick, 64 = Actuator, 128 = Inactive |
1 | Flags2 | Byte | BitFlags: 1 = Wire2, 2 = Wire3, 4 = HasColor, 8 = HasWallColor, 16 = Slope1, 32 = Slope2, 64 = Slope3, 128 = Wire4 |
1 | Color | Byte | Only if HasColor |
1 | Wall Color | Byte | Only if HasWallColor |
2 | Type | UInt16 | Only if Active |
2 | FrameX | Int16 | Only if Active && tileFrameImportant |
2 | FrameY | Int16 | Only if Active && tileFrameImportant |
1 | Wall | Byte | Only if HasWall |
1 | Liquid | Byte | Only if HasLiquid |
1 | LiquidType | Byte | Only if HasLiquid |
Chest Structure
Size | Description | Type | Notes |
---|---|---|---|
2 | Index | Int16 | - |
2 | X | Int16 | - |
2 | Y | Int16 | - |
? | Chest Name | String | - |
Sign Structure
Size | Description | Type | Notes |
---|---|---|---|
2 | Index | Int16 | - |
2 | X | Int16 | - |
2 | Y | Int16 | - |
? | Sign Text | String | - |
TileEntity Structure
Size | Description | Type | Notes |
---|---|---|---|
1 | Type | Byte | 0 = Training Dummy, 1 = Item Frame, 2 = Logic Sensor |
4 | ID | Int32 | - |
2 | X | Int16 | - |
2 | Y | Int16 | - |
2 | NPC Index | Int16 | Only if Type == TrainingDummy |
2 | Item Type | Int16 | Only if Type == ItemFrame |
1 | Item Prefix | Byte | Only if Type == ItemFrame |
2 | Item Stack | Int16 | Only if Type == ItemFrame |
1 | LogicCheckType | Byte | Only if Type == LogicSensor |
1 | On | Bool | Only if Type == LogicSensor |
PlayerDeathReason
Size | Description | Type | Notes |
---|---|---|---|
1 | Player Death Reason | Byte | BitFlags: 1 = Killed via PvP, 2 = Killed via NPC, 4 = Killed via Projectile, 8 = Killed via Other, 16 = Killed via Projectile, 32 = Killed via PvP, 64 = Killed via PvP, 128 = Killed via Custom Modification |
2 | Killer's Player ID | Int16 | Only if BitFlags[0] is true |
2 | Killing NPC's Index | Int16 | Only if BitFlags[1] is true |
2 | Projectile Index | Int16 | Only if BitFlags[2] is true |
1 | Type of Death (Other) | Byte | Only if BitFlags[3] is true: 0 = Fall Damage, 1 = Drowning, 2 = Lava Damage, 3 = Fall Damage, 4 = Demon Altar, 6 = Companion Cube, 7 = Suffocation, 8 = Burning, 9 = Poison/Venom, 10 = Electrified, 11 = WoF (Escape), 12 = WoF (Licked), 13 = Chaos State, 14 = Chaos State v2 (Male), 15 = Chaos State v2 (Female) |
2 | Projectile Type | Int16 | Only if BitFlags[4] is true |
2 | Item Type | Int16 | Only if BitFlags[5] is true |
1 | Item Prefix | Byte | Only if BitFlags[6] is true |
? | Death Reason | String | Only if BitFlags[7] is true |
Updated over 7 years ago