syntax = "proto3"; package proto; // STRUCTS message angles { float pitch = 1; float yaw = 2; } message coords { int32 x = 1; int32 z = 2; } message vec3 { float x = 1; float y = 2; float z = 3; } message ivec3 { int32 x = 1; int32 y = 2; int32 z = 3; } message entity { uint32 index = 1; coords chunk_pos = 2; vec3 local_pos = 3; } message animate { entity entity = 1; uint32 commands = 2; angles viewangles = 3; vec3 velocity = 4; uint32 active_item = 5; } message item { uint32 index = 1; // in inventory uint32 type = 2; uint32 quantity = 3; } message item_array { repeated item items = 1; } message player { animate animate = 1; item_array inventory = 2; } // END STRUCTS // PACKETS message auth { string username = 1; string password = 2; } message init { uint64 seed = 1; int32 draw_distance = 2; player localplayer = 3; uint32 tickrate = 4; uint32 tick = 5; } message move { uint32 commands = 1; angles viewangles = 2; uint32 active_item = 3; uint32 sequence = 4; } message remove_entity { uint32 index = 1; } message say { string text = 1; } message hear_player { uint32 index = 1; string text = 2; } message request_chunk { coords chunk_pos = 1; } message remove_chunk { coords chunk_pos = 1; } message chunk { coords chunk_pos = 1; // There is no uint8, so we have to pack four blocks into each uint32. repeated uint32 blocks = 2 [packed = true]; } message add_block { coords chunk_pos = 1; ivec3 block_pos = 2; // A bit inefficient as we only need 8 bits. We could use the rest for other // stuff down the road. uint32 active_item = 3; } message remove_block { coords chunk_pos = 1; ivec3 block_pos = 2; } message server_message { string message = 1; bool fatal = 2; } message item_swap { // client sent, swap items in an array of items uint32 index_a = 1; uint32 index_b = 2; } message item_use { // client sent, uses an item uint32 index = 1; } message item_update { // server sent, reflects any inventory changes repeated item items = 1; } message animate_update { animate animate = 1; uint32 tick = 2; optional uint32 sequence = 3; } // END OF PACKETS // Actual thing we read. message packet { oneof contents { auth auth_packet = 1; init init_packet = 2; move move_packet = 3; animate_update animate_update_packet = 4; remove_entity remove_entity_packet = 5; say say_packet = 6; hear_player hear_player_packet = 7; request_chunk request_chunk_packet = 8; chunk chunk_packet = 9; remove_chunk remove_chunk_packet = 10; add_block add_block_packet = 11; remove_block remove_block_packet = 12; server_message server_message_packet = 13; item_swap item_swap_packet = 14; item_use item_use_packet = 16; item_update item_update_packet = 15; } }