TShock for Terraria

TShock for Terraria

Stuff

Get Started    Questions

Multiplayer Packet Structure

Individual packets used by the multiplayer protocol

Connect Request [1]

Client -> Server

SizeDescriptionTypeNotes
?VersionString"Terraria" + Main.curRelease

Disconnect [2]

Server -> Client

SizeDescriptionTypeNotes
?ReasonNetworkText-

Set User Slot [3]

Server -> Client

SizeDescriptionTypeNotes
1Player IDByte-

Player Info [4]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
1Skin VarientByte-
1HairByteIf >162 then Set To 0
?NameString-
1Hair DyeByte-
1Hide VisualsByte-
1Hide Visuals 2Byte-
1Hide MiscByte-
3Hair ColorColor-
3Skin ColorColor-
3Eye ColorColor-
3Shirt ColorColor-
3Under Shirt ColorColor-
3Pants ColorColor-
3Shoe ColorColor-
1Difficulty FlagsByteBitFlags: 0 = Softcore, 1 = Mediumcore, 2 = Hardcore, 4 = ExtraAccessory, 8 = Creative
1Torch FlagsByteBitFlags: 1 = UsingBiomeTorches, 2 = HappyFunTorchTime, 4 = unlockedBiomeTorches

Player Inventory Slot [5]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
2Slot IDInt160 - 58 = Inventory, 59 - 78 = Armor, 79 - 88 = Dye, 89 - 93 MiscEquips, 94 - 98 = MiscDyes, 99 - 138 = Piggy bank, 139 - 178 = Safe, 179 = Trash, 180 - 219 = Defender's Forge, 220 - 259 = Void Vault
2StackInt16-
1PrefixByte-
2Item NetIDInt16-

Request World Data [6]

Client -> Server

SizeDescriptionTypeNotes

World Info [7]

Server -> Client

SizeDescriptionTypeNotes
4TimeInt32-
1Day and Moon InfoByteBitFlags: 1 = Day Time, 2 = Blood Moon, 4 = Eclipse
1Moon PhaseByte-
2Max Tiles XInt16-
2Max Tiles YInt16-
2Spawn XInt16-
2Spawn YInt16-
2WorldSurfaceInt16-
2RockLayerInt16-
4World IDInt32-
?World NameString-
1Game ModeByte-
16World Unique IDByte[]-
8World Generator VersionUInt64-
1Moon TypeByte-
1Tree BackgroundByte-
1Corruption BackgroundByte-
1Jungle BackgroundByte-
1Snow BackgroundByte-
1Hallow BackgroundByte-
1Crimson BackgroundByte-
1Desert BackgroundByte-
1Ocean BackgroundByte-
1?? BackgroundByte-
1?? BackgroundByte-
1?? BackgroundByte-
1?? BackgroundByte-
1?? BackgroundByte-
1Ice Back StyleByte-
1Jungle Back StyleByte-
1Hell Back StyleByte-
4Wind Speed SetSingle-
1Cloud NumberByte-
4Tree 1Int32-
4Tree 2Int32-
4Tree 3Int32-
1Tree Style 1Byte-
1Tree Style 2Byte-
1Tree Style 3Byte-
1Tree Style 4Byte-
4Cave Back 1Int32-
4Cave Back 2Int32-
4Cave Back 3Int32-
1Cave Back Style 1Byte-
1Cave Back Style 2Byte-
1Cave Back Style 3Byte-
1Cave Back Style 4Byte-
4Forest 1 Tree Top StyleByte-
4Forest 2 Tree Top StyleByte-
4Forest 3 Tree Top StyleByte-
4Forest 4 Tree Top StyleByte-
4Corruption Tree Top StyleByte-
4Jungle Tree Top StyleByte-
4Snow Tree Top StyleByte-
4Hallow Tree Top StyleByte-
4Crimson Tree Top StyleByte-
4Desert Tree Top StyleByte-
4Ocean Tree Top StyleByte-
4Glowing Mushroom Tree Top StyleByte-
4Underworld Tree Top StyleByte-
4RainSingle-
1Event InfoByteBitFlags: 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
1Event Info 2ByteBitFlags: 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
1Event Info 3ByteBitFlags: 1 = Expert Mode, 2 = FastForwardTime, 4 = Slime Rain, 8 = Downed Slime King, 16 = Downed Queen Bee, 32 = Downed Fishron, 64 = Downed Martians, 128 = Downed Ancient Cultist
1Event Info 4ByteBitFlags: 1 = Downed Moon Lord, 2 = Downed Pumking, 4 = Downed Mourning Wood, 8 = Downed Ice Queen, 16 = Downed Santank, 32 = Downed Everscream, 64 = Downed Golem, 128 = Birthday Party
1Event Info 5ByteBitFlags: 1 = Downed Pirates, 2 = Downed Frost Legion, 4 = Downed Goblins, 8 = Sandstorm, 16 = DD2 Event, 32 = Downed DD2 Tier 1, 64 = Downed DD2 Tier 2, 128 = Downed DD2 Tier 3
1Event Info 6ByteBitFlags: 1 = Combat Book Used, 2 = Manual Lanterns, 4 = Downed Solar Tower, 8 = Downed Vortex Tower, 16 = Downed Tower Nebula, 32 = Downed Stardust Tower, 64 = Force Halloween (day), 128 = Force XMas (day)
1Event Info 7ByteBitFlags: 1 = Bought Cat, 2 = Bought Dog, 4 = Bought Bunny, 8 = Free Cake, 16 = Drunk World, 32 = Downed Empress of Light, 64 = Downed Queen Slime, 128 = GetGoodWorld
2Copper Ore TierInt16Tile ID 7 or 166
2Iron Ore TierInt16Tile ID 6 or 167
2Silver Ore TierInt16Tile ID 9 or 168
2Gold Ore TierInt16Tile ID 8 or 169
2Cobalt Ore TierInt16Tile ID 107 or 221
2Mythril Ore TierInt16Tile ID 108 or 222
2Adamantite Ore TierInt16Tile ID 111 or 223
1Invasion TypeSByte-
8Lobby IDUInt64-
4Sandstorm SeveritySingle-

Request Essential Tiles [8]

This packet is used once in the connecting phase and does the following:

  1. Sends you the spawn sections
  2. Optionally, if spawn coords aren't -1 - sends you the sections of the selected position (which is the player's spawnpoint)
  3. Synchronises all portals and sections around them

Client -> Server

SizeDescriptionTypeNotes
4XInt32Player Spawn X
4YInt32Player Spawn Y

Status [9]

Server -> Client

SizeDescriptionTypeNotes
4StatusMaxInt32Status only increases
?Status TextNetworkText-
1Status Text FlagsByte1 = HideStatusTextPercent, 2 = StatusTextHasShadows, 4 = ServerWantsToRunCheckBytesInClientLoopThread

Send Section [10]

Server -> Client

SizeDescriptionTypeNotes
1CompressedBoolean-
4X StartInt32-
4Y StartInt32-
2WidthInt16-
2HeightInt16-
?Tiles-
2Chest CountInt16-
?Chests-
2Sign CountInt16-
?Signs-
2TileEntity CountInt16-
?TileEntities--

Section Tile Frame [11]

Server -> Client

SizeDescriptionTypeNotes
2Start XInt16-
2Start YInt16-
2End XInt16-
2End YInt16-

Spawn Player [12]

Client -> Server

SizeDescriptionTypeNotes
1Player IDByte-
2Spawn XInt16-
2Spawn YInt16-
4Respawn Time RemainingInt32If > 0, then player is still dead
1Player Spawn ContextByteEnum: 0 = ReviveFromDeath, 1 = SpawningIntoWorld, 2 = RecallFromItem

Update Player [13]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
1ControlByteBitFlags: 1 = ControlUp, 2 = ControlDown, 4 = ControlLeft, 8 = ControlRight, 16 = ControlJump, 32 = ControlUseItem, 64 = Direction
1PulleyByteBitFlags: 1 = Pulley Enabled, 2 = Direction, 4 = UpdateVelocity, 8 = VortexStealthActive, 16 = GravityDirection, 32 = ShieldRaised
1MiscByteBitFlags: 1 = HoveringUp, 2 = VoidVaultEnabled, 4 = Sitting, 8 = DownedDD2Event, 16 = IsPettingAnimal, 32 = IsPettingSmallAnimal, 64 = UsedPotionofReturn, 128 = HoveringDown
1SleepingInfoByteBitFlags: 1 = IsSleeping
1Selected ItemByte-
4Position XSingle-
4Position YSingle-
4Velocity XSingleNot sent if UpdateVelocity is not set
4Velocity YSingleNot sent if UpdateVelocity is not set
4Original Position XSingleOriginal Position for Potion of Return, only sent if UsedPotionofReturn flag is true
4Original Position YSingleOriginal Position for Potion of Return, only sent if UsedPotionofReturn flag is true
4Home Position XSingleHome Position for Potion of Return, only sent if UsedPotionofReturn flag is true
4Home Position YSingleHome Position for Potion of Return, only sent if UsedPotionofReturn flag is true

Player Active [14]

Server -> Client

SizeDescriptionTypeNotes
1Player IDByte-
1ActiveByte-

Null [15]

Never sent

SizeDescriptionTypeNotes

Player HP [16]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
2HPInt16-
2Max HPInt16-

Modify Tile [17]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1ActionByteValues: 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, 20 = KillTile, 21 = ReplaceTile, 22 = ReplaceWall, 23 = SlopePoundTile
2Tile XInt16-
2Tile YInt16-
2Flags1Int16KillTile (Fail: Bool), PlaceTile (Type: Byte), KillWall (Fail: Bool), PlaceWall (Type: Byte), KillTileNoItem (Fail: Bool), SlopeTile (Slope: Byte), ReplaceTile (Type: Int16), ReplaceWall (Type: Int16)
1Flags2BytePlaceTile (Style: Byte), ReplaceTile (Style: Byte)

Time [18]

Server -> Client

SizeDescriptionTypeNotes
1DayTimeBoolean-
4TimeValueInt32-
2SunModYInt16-
2MoonModYInt16-

Door Toggle [19]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1ActionByte0 = Open Door, 1 = Close Door, 2 = Open Trapdoor, 3 = Close Trapdoor, 4 = Open Tall Gate, 5 = Close Tall Gate
2Tile XInt16-
2Tile YInt16-
1DirectionByteIf (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)

SizeDescriptionTypeNotes
2SizeUInt16-
1TileChangeTypeByteOnly if (Size & 0x8000) != 0
2Tile XInt16-
2Tile YInt16-
?Tiles-

Update Item Drop [21]

See Update Item Drop 2 [90]

Update Item Owner [22]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2Item IDInt16-
1Player IDByte-

NPC Update [23]

Server -> Client

SizeDescriptionTypeNotes
2NPC IDInt16-
4Position XSingle-
4Position YSingle-
4Velocity XSingle-
4Velocity YSingle-
2TargetUInt16Player ID
1NpcFlags1ByteBitFlags: 1 = Direction, 2 = DirectionY, 4 = AI[0], 8 = AI[1], 16 = AI[2], 32 = AI[3], 64 = SpriteDirection, 128 = LifeMax
1NpcFlags2ByteBitFlags: 1 = StatsScaled, 2 = SpawnedFromStatue, 4 = StrengthMultiplier
?AI[?]Single[]Only sent for each true AI flag in NpcFlags1
2NPC NetIDInt16-
1playerCountForMultiplayerDifficultyOverrideByteOnly sent if StatsScaled flag is true
4Strength MultiplierSingleOnly sent if StrengthMultiplier flag is true
1LifeBytesByteThe size of Life (in bytes), only sent if LifeMax flag is not true
?LifeVariableByte, Int16, or Int32 according to LifeBytes, only sent if LifeMax flag is not true
1ReleaseOwnerByteOnly present if NPC is catchable

Strike NPCwith Held Item [24]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2NPC IDInt16-
1Player IDByte-

Null [25]

Never sent

SizeDescriptionTypeNotes

Null [26]

Never sent

SizeDescriptionTypeNotes

Projectile Update [27]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2Projectile IDInt16-
4Position XSingle-
4Position YSingle-
4Velocity XSingle-
4Velocity YSingle-
1OwnerBytePlayer ID
2TypeInt16-
1ProjFlagsByteBitFlags: 1 = AI[0], 2 = AI[1], 16 = Damage, 32 = Knockback, 64 = OriginalDamage, 128 = ProjUUID
4AI0SingleOnly sent if AI[0] flag is true
4AI1SingleOnly sent if AI[1] flag is true
2DamageInt16Only sent if Damage flag is true
4KnockbackSingleOnly sent if Knockback flag is true
2Original DamageInt16Only sent if OriginalDamage flag is true
2Proj UUIDInt16Only sent if ProjUUID flag is true

NPC Strike [28]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2NPC IDInt16-
2DamageInt16-1 = Kill
4KnockbackSingle-
1Hit DirectionByte-
1CritBoolean-

Destroy Projectile [29]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2Projectile IDInt16-
1OwnerBytePlayer ID

Toggle P V P [30]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
1PVP EnabledBoolean-

Open Chest [31]

Client -> Server

SizeDescriptionTypeNotes
2Tile XInt16-
2Tile YInt16-

Packet [31] is always used to "open" a world chest (that is, an item container placed in the world). When this packet is received the server will send the chest's contents, and sync the active chest ID to the player using packet [33].

Update Chest Item [32]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2Chest IDInt16-
1Item SlotByte-
2StackInt16-
1PrefixByte-
2Item Net IDInt16-

Sync Active Chest [33]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2Chest IDInt16-
2Chest XInt16-
2Chest YInt16-
1Name LengthByte-
?Chest NameStringOnly if length > 0 && <= 20

This packet is used to tell the server that you've exited the chest view (sending ID -1), that you're looking at your piggy bank (sending ID -2), that you're looking at your safe (sending ID -3) and that you're looking at your defender's forge (sending ID -4). Those are sent at every chest interaction. Packet [33]'s main function is to synchronize the sending client's active chest to the server, and its side function is to rename the chest.
It should be noted that this packet is not sent when you open a regular chest. The server knows which chest you opened when you send [31], so the [33] is only sent upon exit to unblock the chest (as opposed to both open & exit for banks like piggy, safe & defender forge)

PlaceChest [34]

Server <-> Client

SizeDescriptionTypeNotes
1ActionByteBitFlags:0 = Place Chest, 1 = Kill Chest, 2 = Place Dresser, 3 = Kill Dresser. 4 = Place Containers2, 5 = Kill Containers2
2Tile XInt16-
2Tile YInt16-
2StyleInt16FrameX(Chest type)
2Chest ID to destroyInt16ID if client is receiving packet, else 0

Heal Effect [35]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
2Heal AmountInt16-

Player Zone [36]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
1ZoneFlags1Byte1 = Dungeon, 2 = Corruption, 4 =Holy, 8 = Meteor, 16 = Jungle, 32 = Snow, 64 = Crimson, 128 = Water Candle
1ZoneFlags2Byte1 = Peace Candle, 2 = Solar Tower, 4 = Vortex Tower, 8 = Nebula Tower, 16 = Stardust Tower, 32 = Desert, 64 = Glowshroom, 128 = Underground Desert
1ZoneFlags3Byte1 = Sky, 2 = Overworld, 4 = Dirt Layer, 8 = Rock Layer, 16 = Underworld, 32 = Beach, 64 = Rain, 128 = Sandstorm
1ZoneFlags4Byte1 = Old One's Army, 2 = Granite, 4 = Marble, 8 = Hive, 16 = Gem Cave, 32 = Lihzhard Temple, 64 = Graveyard

Request Password [37]

Server -> Client

SizeDescriptionTypeNotes

Send Password [38]

Client -> Server

SizeDescriptionTypeNotes
?PasswordString-

Remove Item Owner [39]

Server -> Client

SizeDescriptionTypeNotes
2Item IndexInt16-

Set Active NPC [40]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
2NPC Talk TargetInt16-

Player Item Animation [41]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
4Item RotationSingle-
2Item AnimationInt16-

Player Mana [42]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
2ManaInt16-
2Max ManaInt16-

Mana Effect [43]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
2Mana AmountInt16-

Null [44]

Never sent

SizeDescriptionTypeNotes

Player Team [45]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
1TeamByte-

Request Sign [46]

Client -> Server

SizeDescriptionTypeNotes
2XInt16-
2YInt16-

Update Sign [47]

Updates sign if sent from client otherwise displays sign to client.

SizeDescriptionTypeNotes
2Sign IDInt16-
2XInt16-
2YInt16-
?TextString-
1Player IDByte-
1SignFlagsByteBitFlags: 1 = TBD

Set Liquid [48]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2XInt16-
2YInt16-
1LiquidByte-
1Liquid TypeByte-

Complete Connection and Spawn [49]

Server -> Client

SizeDescriptionTypeNotes
----

Update Player Buff [50]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
2 * 22BuffTypeUInt16[22]-

Special NPC Effect [51]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
1TypeByteValues: 1 = Spawn Skeletron, 2 = Cause sound at player, 3 = Start Sundialing (Only works if server is receiving), 4 = BigMimcSpawnSmoke, 5 = Register Torch God in Bestiary (from client when they use the item)

Unlock [52]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1TypeByteValues: 1 = Chest Unlock, 2 = Door Unlock
2XInt16-
2YInt16-

Add NPC Buff [53]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2NPC IDInt16-
2BuffUInt16-
2TimeInt16-

Update NPC Buff [54]

Server -> Client

SizeDescriptionTypeNotes
2NPC IDInt16-
2Buff ID 1UInt16-
2Time 1Int16-
2Buff ID 2UInt16-
2Time 2Int16-
2Buff ID 3UInt16-
2Time 3Int16-
2Buff ID 4UInt16-
2Time 4Int16-
2Buff ID 5UInt16-
2Time 5Int16-

Add Player Buff [55]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
2BuffUInt16-
4TimeInt32-

Update NPC Name [56]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2NPC IDInt16-
?NameStringOnly if client is receiving packet
4TownNpcVariationIndexInt32Only if client is receiving packet

Update Good Evil [57]

Server -> Client

SizeDescriptionTypeNotes
1GoodByte-
1EvilByte-
1CrimsonByte-

Play Music Item [58]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
4NoteSingle-

Hit Switch [59]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2XInt16-
2YInt16-

NPC Home Update [60]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2NPC IDInt16-
2Home Tile XInt16-
2Home Tile YInt16-
1HomelessByte-

Spawn Boss Invasion [61]

Client -> Server

SizeDescriptionTypeNotes
2Player IDInt16-
2TypeInt16Negative Values: -1 = GoblinInvasion, -2 = FrostInvasion, -3 = PirateInvasion, -4 = PumpkinMoon, -5 = SnowMoon, -6 = Eclipse, -7 = Martian Moon, -8 = Impending Doom, -10 = Blood Moon, -11 = Combat Book Used, -12 = Bought Cat, -13 = Bought Dog, -14 = Bought Bunny, Positive Values: Spawns any of these NPCs: 4, 13, 50, 126, 125, 134, 127, 128, 131, 129, 130, 222, 245, 266, 370, 657

Player Dodge [62]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
1FlagByte1 = Ninja Dodge 2 = Shadow Dodge

Paint Tile [63]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2XInt16-
2YInt16-
1ColorByte-

Paint Wall [64]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2XInt16-
2YInt16-
1ColorByte-

Player NPC Teleport [65]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1FlagsByteBitFlags: 0 = Player Teleport (Neither 1 or 2), 1 = NPC Teleport, 2 = Player Teleport to Other Player, 4 = GetPositionFromTarget, 8 = HasExtraInfo
2Target IDInt16-
4XSingle-
4YSingle-
1StyleByte-
4ExtraInfoInt32Only sent if HasExtraInfo flag is true

Heal Other Player [66]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
2Heal AmountInt16-

Placeholder [67]

Does not exist in the official client. Exists solely for the purpose of being used by custom clients and servers.

SizeDescriptionTypeNotes
--

Client UUID [68]

Client -> Server

SizeDescriptionTypeNotes
?UUIDString

Get Chest Name [69]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2Chest IDInt16-
2Chest XInt16-
2Chest YInt16-
?NameString-

Catch NPC [70]

Client -> Server

SizeDescriptionTypeNotes
2NPC IDInt16-
1Player IDByte-

Release NPC [71]

Client -> Server

SizeDescriptionTypeNotes
4XInt32-
4YInt32-
2NPC TypeInt16-
1StyleByteSent to NPC AI[2]

Travelling Merchant Inventory [72]

Server -> Client

SizeDescriptionTypeNotes
2*40ItemsInt16[40]Each short related to an item type NetID.

Teleportation Potion [73]

Server <-> Client

SizeDescriptionTypeNotes
1TypeByte0 = Teleportation Potion, 1 = Magic Conch, 2 = Demon Conch

Angler Quest [74]

Server -> Client

SizeDescriptionTypeNotes
1QuestByte-
1CompletedBoolean-

Complete Angler Quest Today [75]

Client -> Server

SizeDescriptionTypeNotes

Number Of Angler Quests Completed [76]

Client -> Server

SizeDescriptionTypeNotes
1Player IDByte-
4Angler Quests CompletedInt32-
4Golfer ScoreInt32-

Create Temporary Animation [77]

Server -> Client

SizeDescriptionTypeNotes
2Animation TypeInt16-
2Tile TypeUInt16-
2XInt16-
2YInt16-

Report Invasion Progress [78]

Server -> Client

SizeDescriptionTypeNotes
4ProgressInt32-
4Max ProgressInt32-
1IconSByte-
1WaveSByte-

Place Object [79]

Server <-> Client

SizeDescriptionTypeNotes
2XInt16-
2YInt16-
2TypeInt16-
2StyleInt16-
1AlternateByte-
1RandomSByte-
1DirectionBoolean-

Sync Player Chest Index [80]

Server -> Client

SizeDescriptionTypeNotes
1PlayerByte-
2ChestInt16-

Create Combat Text [81]

Server -> Client

SizeDescriptionTypeNotes
4XSingle-
4YSingle-
3ColorColor-
4Heal AmountInt32-

Load Net Module [82]

Client -> Server

SizeDescriptionTypeNotes
2Module IDUnsigned Short
??Payload??

Note: 82 is sent prior to chat packets in 1.3.5.x. Instructs the server to load a net module.

Set NPC Kill Count [83]

Server -> Client

SizeDescriptionTypeNotes
2NPC TypeInt16-
4Kill CountInt32-

Set Player Stealth [84]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1PlayerByte-
4StealthSingle-

Force Item Into Nearest Chest [85]

Client -> Server

SizeDescriptionTypeNotes
1Inventory SlotByte-

Update Tile Entity [86]

Server -> Client

SizeDescriptionTypeNotes
4TileEntityIdInt32-
1UpdateTileFlagBooleanIf UpdateTileFlag is false, TileEntity is removed
1TileEntity TypeByteOnly sent if UpdateTileFlag is false
2XInt16Only sent if UpdateTileFlag is false
2YInt16Only sent if UpdateTileFlag is false

Place Tile Entity [87]

Client -> Server

SizeDescriptionTypeNotes
2XInt16-
2YInt16-
1TileEntityTypeByte2 = Logic Sensor 1 = Item Frame 0 = Training Dummy

Tweak Item (FKA. Alter Item Drop) [88]

Server -> Client

SizeDescriptionTypeNotes
2Item IndexInt16-
1Flags1ByteBitFlags: 1 = Color, 2 = Damage, 4 = Knockback, 8 = UseAnimation, 16 = UseTime, 32 = Shoot, 64 = ShootSpeed, 128 = NextFlags
4Packed Color ValueUInt32if Flags1.Color
2DamageUInt16if Flags1.Damage
4KnockbackSingleif Flags1.Knockback
2Use AnimationUInt16if Flags1.UseAnimation
2Use TimeUInt16if Flags1.UseTime
2ShootInt16if Flags1.Shoot
4ShootSpeedFloatif Flags1.ShootSpeed
1Flags2Byteif Flags1.NextFlags, BitFlags: 1 = Width, 2 = Height, 4 = Scale, 8 = Ammo, 16 = UseAmmo, 32 = NotAmmo
2WidthInt16if Flags2.Width
2HeightInt16if Flags2.Height
4ScaleFloatif Flags2.Scale
2AmmoInt16If Flags2.Ammo
2UseAmmoInt16If Flags2.UseAmmo
1NotAmmoBoolIf Flags2.NotAmmo

Place Item Frame [89]

Client -> Server

SizeDescriptionTypeNotes
2XInt16-
2YInt16-
2ItemIdInt16-
1PrefixByte-
2StackInt16-

Update Item Drop 2 [90]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2Item IDInt16If below 400 and NetID 0 Then Set NullIf ItemID is 400 Then New Item
4Position XSingle-
4Position YSingle-
4Velocity XSingle-
4Velocity YSingle-
2Stack SizeInt16-
1PrefixByte-
1NoDelayByteIf 0 then ownIgnore = 0 and ownTime = 100
2Item Net IDInt16-

Sync Emote Bubble [91]

Server -> Client

SizeDescriptionTypeNotes
4Emote IDInt32-
1Anchor TypeByte-
2Player IDUInt16Only sent if AnchorType != 255
2Emote LifeTimeUInt16Only sent if AnchorType != 255
1EmoteByteOnly sent if AnchorType != 255
2Emote MetaDataInt16Only sent if AnchorType != 255 and Emote < 0

Sync Extra Value [92]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2NPC IndexInt16-
4Extra ValueInt32-
4XSingle-
4YSingle-

Social Handshake [93]

Not used

SizeDescriptionTypeNotes

Deprecated [94]

Not used

SizeDescriptionTypeNotes

Kill Portal [95]

Client -> Server

SizeDescriptionTypeNotes
2Projectile OwnerUInt16-
1Projectile AIByte-

Player Teleport Portal [96]

Server <-> Client

SizeDescriptionTypeNotes
1Player IDByte-
2Portal Color IndexInt16-
4New Position XSingle-
4New Position YSingle-
4Velocity XSingle-
4Velocity YSingle-

Notify Player NPC Killed [97]

Server -> Client

SizeDescriptionTypeNotes
2NPC IDInt16-

Notify Player Of Event [98]

Server -> Client

SizeDescriptionTypeNotes
2Event IDInt16-

Update Minion Target [99]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
4Target XSingle-
4Target YSingle-

NPC Teleport Portal [100]

Server <-> Client

SizeDescriptionTypeNotes
2NPC IDUInt16-
2Portal Color IndexInt16-
4New Position XSingle-
4New Position YSingle-
4Velocity XSingle-
4Velocity YSingle-

Update Shield Strengths [101]

Server -> Client

SizeDescriptionTypeNotes
2Solar Tower Shield StrengthUInt16-
2Vortex Tower Shield StrengthUInt16-
2Nebula Tower Shield StrengthUInt16-
2Stardust Tower Shield StrengthUInt16-

Nebula Level Up [102]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Player IDByte-
2Level Up TypeUInt16-
4Origin XSingleIn world coordinate pixels.
4Origin YSingleIn world coordinate pixels.

Moon Lord Countdown [103]

Server -> Client

SizeDescriptionTypeNotes
4Moon Lord CountdownInt32-

NPC Shop Item [104]

Server -> Client

SizeDescriptionTypeNotes
1SlotByte-
2Item TypeInt16-
2StackInt16-
1PrefixByte-
4ValueInt32-
1FlagsByteBitFlags: 1 = BuyOnce

Gem Lock Toggle [105]

Client -> Server

SizeDescriptionTypeNotes
2XInt16-
2YInt16-
1OnBoolean-

Poof of Smoke [106]

Server -> Client

SizeDescriptionTypeNotes
4PackedVectorUInt32Two Int16's packed into 4 bytes.

Smart Text Message (FKA. Chat Message v2) [107]

Server -> Client

SizeDescriptionTypeNotes
3Message ColorColorClient cannot change colors
?MessageNetworkText
2Message LengthInt16

Wired Cannon Shot [108]

Server -> Client

SizeDescriptionTypeNotes
2DamageInt16-
4KnockbackSingle-
2XInt16-
2YInt16-
2AngleInt16-
2AmmoInt16-
1Player IDByteShooter's Player ID

Mass Wire Operation [109]

Client -> Server

SizeDescriptionTypeNotes
2Start XInt16-
2Start YInt16-
2End XInt16-
2End YInt16-
1ToolModeByteBitFlags: 1 = Red, 2 = Green, 4 = Blue, 8 = Yellow, 16 = Actuator, 32 = Cutter

Mass Wire Operation Consume [110]

Server -> Client

SizeDescriptionTypeNotes
2Item TypeInt16-
2QuantityInt16-
1Player IDByte-

Toggle Birthday Party [111]

Client -> Server

SizeDescriptionTypeNotes

GrowFX [112]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1EffectFlagsByte1 = Tree Growth Effects, 2 = Fairy Effects
4XInt32-
4YInt32-
1DataByteif EffectFlag is TreeGrowth, data is Height; if EffectFlag is Fairy Effects, data is effect Type
2Tree GoreInt16Always 0 unless it is TreeGrowth

CrystalInvasionStart [113]

Client -> Server

SizeDescriptionTypeNotes
2XInt16-
2YInt16-

CrystalInvasionWipeAll [114]

Server -> Client

SizeDescriptionTypeNotes

MinionAttackTargetUpdate [115]

Client -> Server

SizeDescriptionTypeNotes
1Player IDByte-
2Minion Attack TargetInt16-

CrystalInvasionSendWaitTime [116]

Server -> Client

SizeDescriptionTypeNotes
4Time Until Next WaveInt321800 (30s) between waves, 30 (5s) when starting

PlayerHurtV2 [117]

Client -> Server

SizeDescriptionTypeNotes
1Player IDByte-
?Player Death ReasonPlayerDeathReason-
2DamageInt16-
1Hit DirectionByte-
1FlagsByteBitFlags: 1 = Crit, 2 = PvP
1Cooldown CounterSByte-

PlayerDeathV2 [118]

Client -> Server

SizeDescriptionTypeNotes
1Player IDByte-
?Player Death ReasonPlayerDeathReason-
2DamageInt16-
1Hit DirectionByte-
1FlagsByteBitFlags: 1 = PvP

CombatTextString [119]

Client <-> Server

SizeDescriptionTypeNotes
4XSingle-
4YSingle-
3ColorColor-
?Combat TextNetworkText-

Emoji [120]

Client -> Server

SizeDescriptionTypeNotes
1Player IndexByte-
1Emoticon IDByte-

TEDisplayDollItemSync [121]

Client <-> Server

SizeDescriptionTypeNotes
1Player IDByte-
4TileEntity IDInt32-
1Item IndexByte-
2Item IDUInt16-
2StackUInt16-
1PrefixByte-

RequestTileEntityInteraction [122]

Client <-> Server

SizeDescriptionTypeNotes
4TileEntityIDInt32-
1Player IDByte-

WeaponsRackTryPlacing [123]

Client -> Server

SizeDescriptionTypeNotes
2XInt16-
2YInt16-
2Net IDInt16-
1PrefixByte-
2StackInt16-

TEHatRackItemSync [124]

Client <-> Server

SizeDescriptionTypeNotes
1Player IDByte-
4TileEntityIDInt32-
1Item IndexByte-
2Item IDUInt16-
2StackUInt16-
1PrefixByte-

SyncTilePicking [125]

Client <-> Server

SizeDescriptionTypeNotes
1Player IDByte-
2XInt16-
2YInt16-
1Pick DamageByte-

SyncRevengeMarker [126]

Server -> Client

SizeDescriptionTypeNotes
4Unique IDInt32-
4XSingle-
4YSingle-
4NPC IDInt32-
4NPC HP PercentSingle-
4NPC TypeInt32-
4NPC AIInt32-
4Coin ValueInt32-
4Base ValueSingle-
1SpawnedFromStatueBoolean-

RemoveRevengeMarker [127]

Server -> Client

SizeDescriptionTypeNotes
4Unique IDInt32-

LandGolfBallInCup [128]

Client <-> Server

SizeDescriptionTypeNotes
1Player IDByte-
2XUInt16-
2YUInt16-
2Number of HitsUInt16-
2Proj IDUInt16-

FinishedConnectingToServer [129]

Server -> Client

SizeDescriptionTypeNotes

FishOutNPC [130]

Client -> Server

SizeDescriptionTypeNotes
2XUInt16-
2YUInt16-
2NPC IDInt16-

TamperWithNPC [131]

Server -> Client

SizeDescriptionTypeNotes
2NPC IDUInt16-
1SetNPCImmunityByte-
4Immunity TimeInt32Only sent if SetNPCImmunity flag is true
2Immunity Player IDInt16Set to -1 for immunity from all players

PlayLegacySound [132]

Server -> Client

SizeDescriptionTypeNotes
4XSingle-
4YSingle-
2Sound IDUInt16-
1Sound FlagsByteBitFlags: 1 = Style, 2 = Volume Scale, 3 = Pitch Offset

FoodPlatterTryPlacing [133]

Client -> Server

SizeDescriptionTypeNotes
2XInt16-
2YInt16-
2Item IDInt16-
1PrefixByte-
2StackInt16-

UpdatePlayerLuckFactors [134]

Client <-> Server

SizeDescriptionTypeNotes
1Player IDByte-
4Ladybug Luck Time RemainingInt32-
4Torch LuckSingle-
1Luck PotionByte-
1HasGardenGnomeNearbyBoolean-

DeadPlayer [135]

Server -> Client

SizeDescriptionTypeNotes
1Player IDByte-

SyncCavernMonsterType [136]

Client <-> Server

SizeDescriptionTypeNotes
2Net IDUInt16NPC.cavernMonsterType[0,0]
2Net IDUInt16NPC.cavernMonsterType[0,1]
2Net IDUInt16NPC.cavernMonsterType[0,2]
2Net IDUInt16NPC.cavernMonsterType[1,0]
2Net IDUInt16NPC.cavernMonsterType[1,1]
2Net IDUInt16NPC.cavernMonsterType[1,2]

RequestNPCBuffRemoval [137]

Client -> Server

SizeDescriptionTypeNotes
2NPC IDInt16-
2Buff IDUInt16-

ClientFinishedInventoryChangesOnThisTick (formerly ClientSyncedInventory) [138]

Client -> Server

SizeDescriptionTypeNotes

Sent by the client code in TrySyncingMyPlayer twice when a player moves an item around in their inventory. Packet actually has no data. Total payload size is 2 packets per inventory item drag, with 3 bytes each (2 for length, 1 for packet ID). This is a functionally useless packet.

SetCountsAsHostForGameplay [139]

Server -> Client

SizeDescriptionTypeNotes
1Player IDByte-
1CountsAsHostBoolean-

SetMiscEventValues [140]

Server -> Client

SizeDescriptionTypeNotes
1UnusedByteValue is never used but set as 0. Possible flexible design pattern?
4creditsRollRemainingTimeInt32Clamped. Min 0, Max 28800.

Appendix

Color Structure

SizeDescriptionTypeNotes
1RedByte-
1GreenByte-
1BlueByte-

Tile Structure

SizeDescriptionTypeNotes
1Flags1ByteBitFlags: 1= Active, 2= Lighted, 4 = HasWall, 8 = HasLiquid, 16 = Wire1, 32 = HalfBrick, 64 = Actuator, 128 = Inactive
1Flags2ByteBitFlags: 1 = Wire2, 2 = Wire3, 4 = HasColor, 8 = HasWallColor, 16 = Slope1, 32 = Slope2, 64 = Slope3, 128 = Wire4
1ColorByteOnly if HasColor
1Wall ColorByteOnly if HasWallColor
2TypeUInt16Only if Active
2FrameXInt16Only if Active && tileFrameImportant
2FrameYInt16Only if Active && tileFrameImportant
1WallUInt16Only if HasWall
1LiquidByteOnly if HasLiquid
1LiquidTypeByteOnly if HasLiquid

Chest Structure

SizeDescriptionTypeNotes
2IndexInt16-
2XInt16-
2YInt16-
?Chest NameString-

Sign Structure

SizeDescriptionTypeNotes
2IndexInt16-
2XInt16-
2YInt16-
?Sign TextString-

TileEntity Structure

SizeDescriptionTypeNotes
1TypeByte0 = Training Dummy, 1 = Item Frame, 2 = Logic Sensor, 3 = Display Doll, 4 = Weapons Rack, 5 = Hat Rack, 6 = Food Platter, 7 = Teleportation Pylon
4IDInt32-
2XInt16-
2YInt16-
?ExtraDataVariableSee TE types below.

TrainingDummy ExtraData

SizeDescriptionTypeNotes
2NPC IndexInt16-

ItemFrame ExtraData

SizeDescriptionTypeNotes
2Item TypeInt16-
1Item PrefixByte-
2Item StackInt16-

LogicSensor ExtraData

SizeDescriptionTypeNotes
1LogicCheckTypeByte-
1OnBool-

DisplayDoll ExtraData

SizeDescriptionTypeNotes
1DollFlags1ByteBitFlags: 0-8 items
1DollFlags2ByteBitFlags: 0-8 items
2Item TypeInt16See note
1Item PrefixByteSee note
2Item StackInt16See note
2Dye TypeInt16See note
1Dye PrefixByteSee note
2Dye StackInt16See note

Note: Each bit in DollFlags1 represents the presence of one item on the doll. For each item, it will loop through and read the item type, prefix, and stack. Then it will move on to the dyes and read the type, prefix, and stack for the dye items.

WeaponsRack ExtraData

SizeDescriptionTypeNotes
2Item TypeInt16-
1Item PrefixByte-
2Item StackInt16-

HatRack ExtraData

SizeDescriptionTypeNotes
1HatFlagsByteBitFlags: 0-2 items
2Item TypeInt16See note
1Item PrefixByteSee note
2Item StackInt16See note
2Dye TypeInt16See note
1Dye PrefixByteSee note
2Dye StackInt16See note

Note: Each bit in HatFlags represents the presence of one item on the hat rack. For each item, it will loop through and read the item type, prefix, and stack. Then it will move on to the dyes and read the type, prefix, and stack for the dye items.

FoodPlatter ExtraData

SizeDescriptionTypeNotes
2Item TypeInt16-
1Item PrefixByte-
2Item StackInt16-

PlayerDeathReason

SizeDescriptionTypeNotes
1Player Death ReasonByteBitFlags: 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
2Killer's Player IDInt16Only if BitFlags[0] is true
2Killing NPC's IndexInt16Only if BitFlags[1] is true
2Projectile IndexInt16Only if BitFlags[2] is true
1Type of Death (Other)ByteOnly 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)
2Projectile TypeInt16Only if BitFlags[4] is true
2Item TypeInt16Only if BitFlags[5] is true
1Item PrefixByteOnly if BitFlags[6] is true
?Death ReasonStringOnly if BitFlags[7] is true

NetworkText

SizeDescriptionTypeNotes
1ModeByteEnum: 0 = Literal, 1 = Formattable, 2 = LocalizationKey
?TextString-
1SubstitutionList LengthByteOnly if Mode != Literal
?SubstitutionListNetworkText[]Only if Mode != Literal

ParticleOrchestraType

SizeDescriptionTypeNotes
8PositionVector2-
8Movement VectorVector2-
4PackedShaderIndexInt32-
1Invoking Player IDByte-

Net Modules

Liquid [0]

Server -> Client

SizeDescriptionTypeNotes
2Total changesUInt16Number of times the following has been repeated.
4PositionInt32Y is the first 2 bytes, X is the last 2 bytes.
1Liquid AmountByte0-255
1Liquid TypeByte1 = Water, 2 = Lava, 3 = Honey

Text [1]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Author IndexByteOnly 0-254 shows chat above heads. Not sent by client, client's index is used for id.
?Message TextNetworkText-
3ColorColorNot sent by client

Ping [2]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
8PositionVector2-

Ambience [3]

Server -> Client

SizeDescriptionTypeNotes
1Player IDBytePlayer the effect centers around
4SeedInt32Seed for FastRandom
1SkyEntity TypeByte0 = BirdsV, 1 = Wyvern, 2 = Airship, 3 = AirBalloon, 4 = Eyeball, 5 = Meteor, 6 = BoneSerpent, 7 = Bats, 8 = Butterflies, 9 = LostKite, 10 = Vulture, 11 = PixiePosse, 12 = Seagulls, 13 = SlimeBalloons, 14 = Gastropods, 15 = Pegasus, 16 = EaterOfSouls, 17 = Crimera, 18 = Hellbats

Bestiary [4]

Server -> Client

SizeDescriptionTypeNotes
1BestiaryUnlockTypeByte0 = Kill, 1 = Sight, 2 = Chat
2NPC NetIDInt16-
2Kill CountUInt16Only included if BestiaryUnlockType is Kill

CreativeUnlocks [5]

Server -> Client

SizeDescriptionTypeNotes
2Item IDInt16-
2Sacrificed/Researched Item AmountUInt16-

Note: This does not appear to be used in code, Journey mode uses CreativeUnlocksPlayerReport instead.

CreativePowers [6]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
2Power TypeUInt160 = FreezeTime, 1 = StartDayImmediately, 2 = StartNoonImmediately, 3 = StartNightImmediately, 4 = StartMidnightImmediately, 5 = GodmodePower, 6 = ModifyWindDirectionAndStrength, 7 = ModifyRainPower, 8 = ModifyTimeRate, 9 = FreezeRainPower, 10 = FreezeWindDirectionAndStrength, 11 = FarPlacementRangePower, 12 = DifficultySliderPower, 13 = StopBiomeSpreadPower, 14 = SpawnRateSliderPerPlayerPower

Note: There are permission checks in place, but all powers only use CanBeChangedByEveryone so they all pass unless a plugin changes this.

namespace Terraria.GameContent.Creative
{
    public enum PowerPermissionLevel
    {
        LockedForEveryone,       //0 Will always reject
        CanBeChangedByHostAlone, //1 Will only accept if on singleplayer (Main.netMode = 0)
        CanBeChangedByEveryone   //2 Default value for all
    }
}

CreativeUnlocksPlayerReport [7]

Client -> Server

SizeDescriptionTypeNotes
10ByteAlways zero, value here was intended for other potential unlock reports. Within NetCreativePowerPermissionsModule, private const _requestItemSacrificeId = 0
2Item IDUInt16-
2Sacrificed/Researched Item AmountUInt16-

TeleportPylon [8]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Pylon Packet TypeByte0 = PylonWasAdded, 1 = PylonWasRemoved, 2 = PlayerRequestsTeleport
2Position XInt16-
2Position YInt16-
1Pylon TypeByte0 = SurfacePurity, 1 = Jungle, 2 = Hallow, 3 = Underground, 4 = Beach, 5 = Desert, 6 = Snow, 7 = GlowingMushroom, 8 = Victory (Universal Pylon)

Particles [9]

Server <-> Client (Sync)

SizeDescriptionTypeNotes
1Particle TypeByte0 = Keybrand, 1 = FlameWaders, 2 = StellarTune, 3 = WallOfFleshGoatMountFlames, 4 = BlackLightningHit, 5 = RainbowRodHit, 6 = BlackLightningSmall, 7 = StardustPunch, 8 = PrincessWeapon
21ParticleOrchestraTypeParticleOrchestraType-

CreativePowerPermissions [10]

Server -> Client

SizeDescriptionTypeNotes
10ByteAlways zero, value here maybe intended for other potential unlock reports. Within NetCreativePowerPermissionsModule, private const _setPermissionLevelId = 0
2Power TypeUInt160 = FreezeTime, 1 = StartDayImmediately, 2 = StartNoonImmediately, 3 = StartNightImmediately, 4 = StartMidnightImmediately, 5 = GodmodePower, 6 = ModifyWindDirectionAndStrength, 7 = ModifyRainPower, 8 = ModifyTimeRate, 9 = FreezeRainPower, 10 = FreezeWindDirectionAndStrength, 11 = FarPlacementRangePower, 12 = DifficultySliderPower, 13 = StopBiomeSpreadPower, 14 = SpawnRateSliderPerPlayerPower
1Power LevelByte0 = LockedForEveryone, 1 = CanBeChangedByHostAlone, 2 = CanBeChangedByEveryone

Note: All powers use only CanBeChangedByEveryone. If the server tells the client a power has a permission other than default, it will be stopped client-side and notified in the client's localization.

namespace Terraria.GameContent.Creative
{
    public enum PowerPermissionLevel
    {
        LockedForEveryone,       //0 Will always reject
        CanBeChangedByHostAlone, //1 Will only accept if on singleplayer (Main.netMode = 0)
        CanBeChangedByEveryone   //2 Default value for all
    }
}