def give_item(name='give_item'): return Struct( name, star_string('name'), VLQ('count'), Byte('variant_type'), star_string('description') )
def client_connect(name='client_connect'): return Struct( name, StarByteArray('asset_digest'), HexAdapter(Field('uuid', 16)), star_string('name'), star_string('species'), ChunkVariant('ship_data'), UBInt32('ship_level'), UBInt32('max_fuel'), VLQ('capabilities_length'), Array(lambda ctx: ctx.capabilities_length, Struct('capabilities', star_string('value'))), star_string('account'))
def damage_request(name='damage_request'): return Struct(name, UBInt32('source_entity_id'), UBInt32('target_entity_id'), UBInt8('hit_type'), UBInt8('damage_type'), BFloat32('damage'), BFloat32('knockback_x'), BFloat32('knockback_y'), UBInt32('source_entity_id_wut'), star_string('damage_source_kind'), GreedyRange(star_string('stuats_effects')))
def damage_notification(name='damage_notification'): return Struct( name, UBInt32('source_entity_id'), UBInt32('source_entity_id_wut'), UBInt32('target_entity_id'), VLQ('x'), VLQ('y'), VLQ('damage'), star_string('damage_kind'), star_string('target_material'), Flag('killed') )
def damage_request(name='damage_request'): return Struct( name, UBInt32('source_entity_id'), UBInt32('target_entity_id'), UBInt8('hit_type'), UBInt8('damage_type'), BFloat32('damage'), BFloat32('knockback_x'), BFloat32('knockback_y'), UBInt32('source_entity_id_wut'), star_string('damage_source_kind'), GreedyRange(star_string('stuats_effects')) )
def chat_received(name='chat_received'): return Struct( name, Enum( Byte('mode'), CHANNEL=0, BROADCAST=1, WHISPER=2, COMMAND_RESULT=3 ), star_string('channel'), UBInt32('client_id'), star_string('name'), star_string('message') )
def swap_in_container_result(name='swap_in_container_result'): return Struct( name, star_string('item_name'), VLQ('count'), Byte('variant_type'), GreedyRange(StarByteArray('item_description')) )
def warp_touniqueworld_write(name='warp_touniqueworld_write'): return Struct( name, Byte('warp_type'), Byte('world_type'), star_string('unique_world_name'), Byte('has_position') )
def swap_in_container(name='swap_in_container'): return Struct( name, VLQ('entity_id'), # Where are we putting stuff star_string('item_name'), VLQ('count'), Byte('variant_type'), StarByteArray('item_description'), VLQ('slot'))
def swap_in_container(name='swap_in_container'): return Struct( name, VLQ('entity_id'), # Where are we putting stuff star_string('item_name'), VLQ('count'), Byte('variant_type'), StarByteArray('item_description'), VLQ('slot') )
def client_connect(name='client_connect'): return Struct( name, StarByteArray('asset_digest'), HexAdapter(Field('uuid', 16)), star_string('name'), star_string('species'), ChunkVariant('ship_data'), UBInt32('ship_level'), UBInt32('max_fuel'), VLQ('capabilities_length'), Array( lambda ctx: ctx.capabilities_length, Struct( 'capabilities', star_string('value') ) ), star_string('account') )
def chat_sent(name='chat_sent'): return Struct( name, star_string('message'), Enum( Byte('send_mode'), BROADCAST=0, LOCAL=1, PARTY=2 ) )
def update_world_properties(name='world_properties'): return Struct( name, UBInt8('count'), Array( lambda ctx: ctx.count, Struct( 'properties', star_string('key'), Variant('value') ) ) )
# ----- Primary connection sequence ----- # (0) - ProtocolVersion : S -> C protocol_version = lambda name="protocol_version": Struct(name, UBInt32("server_build")) # (7) - ClientConnect : C -> S client_connect = lambda name="client_connect": Struct(name, VLQ("asset_digest_length"), String("asset_digest", lambda ctx: ctx.asset_digest_length), Flag("uuid_exists"), If(lambda ctx: ctx.uuid_exists is True, HexAdapter(Field("uuid", 16)) ), star_string("name"), star_string("species"), StarByteArray("ship_data"), UBInt32("ship_level"), UBInt32("max_fuel"), VLQ("capabilities_length"), Array(lambda ctx: ctx.capabilities_length, Struct("capabilities", star_string("value"))), star_string("account")) # (3) - HandshakeChallenge : S -> C handshake_challenge = lambda name="handshake_challenge": Struct(name, StarByteArray("salt")) # (9) - HandshakeResponse : C -> S
def world_stop(name='world_stop'): return Struct(name, star_string('reason'))
def give_item(name='give_item'): return Struct(name, star_string('name'), VLQ('count'), Byte('variant_type'), star_string('description'))
def chat_sent(name='chat_sent'): return Struct(name, star_string('message'), Enum(Byte('send_mode'), BROADCAST=0, LOCAL=1, PARTY=2))
def celestial_request(name='celestial_request'): return Struct(name, GreedyRange(star_string('requests')))
def server_disconnect(name='server_disconnect'): return Struct(name, star_string('reason'))
def chat_received(name='chat_received'): return Struct( name, Enum(Byte('mode'), CHANNEL=0, BROADCAST=1, WHISPER=2, COMMAND_RESULT=3), star_string('channel'), UBInt32('client_id'), star_string('name'), star_string('message'))
def handshake_response(name='handshake_response'): return Struct(name, star_string('hash'))
def connect_failure(name='connect_failure'): return Struct(name, star_string('reject_reason'))
def warp_touniqueworld_write(name='warp_touniqueworld_write'): return Struct(name, Byte('warp_type'), Byte('world_type'), star_string('unique_world_name'), Byte('has_position'))
def swap_in_container_result(name='swap_in_container_result'): return Struct(name, star_string('item_name'), VLQ('count'), Byte('variant_type'), GreedyRange(StarByteArray('item_description')))
def damage_notification(name='damage_notification'): return Struct(name, UBInt32('source_entity_id'), UBInt32('source_entity_id_wut'), UBInt32('target_entity_id'), VLQ('x'), VLQ('y'), VLQ('damage'), star_string('damage_kind'), star_string('target_material'), Flag('killed'))
'player_world', HexAdapter(Field('uuid', 16)), Optional(Byte('has_position')), If( lambda ctx: ctx['has_position'], Struct( 'position', SBInt32('x'), SBInt32('y') ) ) ) WARP_WORLD_MISSION = Struct( 'mission_world', star_string('mission_world_name'), Byte('check'), If( lambda ctx: ctx['check'] == 1, HexAdapter(Field('instance', 16)) ) ) def packet(name='base_packet'): return Struct( name, Byte('id'), SignedVLQ('payload_size'), Field('data', lambda ctx: abs(ctx.payload_size)) )
def update_world_properties(name='world_properties'): return Struct( name, UBInt8('count'), Array(lambda ctx: ctx.count, Struct('properties', star_string('key'), Variant('value'))))
default=Pass)) WARP_WORLD_CELESTIAL = Struct( 'celestial_world', SBInt32('x'), SBInt32('y'), SBInt32('z'), SBInt32('planet'), SBInt32('satellite'), Optional(Byte('has_position')), If(lambda ctx: ctx['has_position'], Struct('position', SBInt32('x'), SBInt32('y')))) WARP_WORLD_PLAYER = Struct( 'player_world', HexAdapter(Field('uuid', 16)), Optional(Byte('has_position')), If(lambda ctx: ctx['has_position'], Struct('position', SBInt32('x'), SBInt32('y')))) WARP_WORLD_MISSION = Struct( 'mission_world', star_string('mission_world_name'), Byte('check'), If(lambda ctx: ctx['check'] == 1, HexAdapter(Field('instance', 16)))) def packet(name='base_packet'): return Struct(name, Byte('id'), SignedVLQ('payload_size'), Field('data', lambda ctx: abs(ctx.payload_size))) def start_packet(name='interim_packet'): return Struct(name, Byte('id'), SignedVLQ('payload_size')) def connection(name='connection'): return Struct(name, GreedyRange(Byte('compressed_data')))
class PacketOutOfOrder(Exception): pass class HexAdapter(Adapter): def _encode(self, obj, context): return obj.decode( "hex") # The code seems backward, but I assure you it's correct. def _decode(self, obj, context): return obj.encode("hex") handshake_response = lambda name="handshake_response": Struct(name, star_string("claim_response"), star_string("hash")) universe_time_update = lambda name="universe_time": Struct(name, VLQ("unknown")) packet = lambda name="base_packet": Struct(name, Byte("id"), SignedVLQ("payload_size"), Field("data", lambda ctx: abs( ctx.payload_size))) start_packet = lambda name="interim_packet": Struct(name, Byte("id"), SignedVLQ("payload_size"))
class PacketOutOfOrder(Exception): pass class HexAdapter(Adapter): def _encode(self, obj, context): return obj.decode( "hex") # The code seems backward, but I assure you it's correct. def _decode(self, obj, context): return obj.encode("hex") handshake_response = lambda name="handshake_response": Struct( name, star_string("claim_response"), star_string("hash")) universe_time_update = lambda name="universe_time": Struct( name, VLQ("unknown")) packet = lambda name="base_packet": Struct( name, Byte("id"), SignedVLQ("payload_size"), Field("data", lambda ctx: abs(ctx.payload_size))) start_packet = lambda name="interim_packet": Struct(name, Byte("id"), SignedVLQ("payload_size")) protocol_version = lambda name="protocol_version": Struct( name, UBInt32("server_build")) connection = lambda name="connection": Struct(