XTerraPacket

0.5.0

Terraria Packet Library in Swift
Xenoxiluna/XTerraPacket

What's New

v0.5.0

2020-06-17T01:32:54Z

Most of the necessary work has been completed. All but 4 packets remain. The next updates will focus mainly on documentation.

XTerraPacket

Swift 5.X GitHub license Docs

A Packet Library for encoding and decoding Terraria's network protocol packets.

NOTE: Currently this supports only Terraria 1.4.X

Usage

Brief example using SwiftNIO for now... You can also look at TerraProxy-CLI for inspiration/uses.

Decode

You can decode an incoming packet's raw bytes like this:

let packetData = bb.getBytes(at: 0, length: bb.readableBytes)!
guard var packet = try? TerrariaPacketFactory.decodePacket(packet: packetData) else {
    print("Parse failed!")
    print("Failed bytes: \(packetData))")
    channel.writeAndFlush(NIOAny.init(bb), promise: nil)
    return
}

Once you have a valid packet, you can view its type using the swifts dynamic type(of:) function or using the provided getType() protocol extension.

print("Swift Packet type: \(type(of: packet))")
print("Packet Type: \(packet.getType())")

Form there, its possible to run the decode again to translate the payload. You could also just use the packets decodePayload() function.

do{
    try packet.decode()
    print("Decoded Packet Bytes: \(packet.bytes))")
}catch{
    print("Decode failed...")
    print("Failed Packet Bytes: \(packet.bytes))")
    return
}

switch packet.getType(){
case TerrariaPacketType.ConnectApproval:
    let appPacket = packet as! PacketConnectApproval
    connection.setPlayerId(playerId: Int(appPacket.playerId))
default:
    print("")
}

Encode

TODO For now, See API Documentation for encode functionality.

Dependencies

License

XTerraPacket is licensed under the MIT License

Description

  • Swift Tools 5.0.0
View More Packages from this Author

Dependencies

Last updated: Wed Jun 29 2022 11:49:47 GMT-0500 (GMT-05:00)