Track player positions and add !here
This commit is contained in:
		
							
								
								
									
										63
									
								
								game.py
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								game.py
									
									
									
									
									
								
							@@ -327,6 +327,7 @@ class Game:
 | 
				
			|||||||
        register(self.handle_destroy_entities, DestroyEntitiesPacket)
 | 
					        register(self.handle_destroy_entities, DestroyEntitiesPacket)
 | 
				
			||||||
        register(self.handle_spawn_player, SpawnPlayerPacket)
 | 
					        register(self.handle_spawn_player, SpawnPlayerPacket)
 | 
				
			||||||
        register(self.handle_respawn, clientbound.play.RespawnPacket)
 | 
					        register(self.handle_respawn, clientbound.play.RespawnPacket)
 | 
				
			||||||
 | 
					        register(self.handle_player_list, clientbound.play.PlayerListItemPacket)
 | 
				
			||||||
        #register(self.handle_entity_velocity, clientbound.play.EntityVelocityPacket)
 | 
					        #register(self.handle_entity_velocity, clientbound.play.EntityVelocityPacket)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #register(self.handle_packet, Packet, early=True)
 | 
					        #register(self.handle_packet, Packet, early=True)
 | 
				
			||||||
@@ -454,7 +455,7 @@ class Game:
 | 
				
			|||||||
                reply = data
 | 
					                reply = data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if command == 'pos':
 | 
					            if command == 'pos':
 | 
				
			||||||
                reply = str(utils.pint(self.g.pos))[1:-1]
 | 
					                reply = str(utils.pint(self.g.pos))[1:-1] + ', ' + self.g.dimension
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if command == 'afk':
 | 
					            if command == 'afk':
 | 
				
			||||||
                if not self.g.afk:
 | 
					                if not self.g.afk:
 | 
				
			||||||
@@ -512,6 +513,14 @@ class Game:
 | 
				
			|||||||
            if command == 'loaded':
 | 
					            if command == 'loaded':
 | 
				
			||||||
                reply = str(self.g.chunks.get_loaded_area())
 | 
					                reply = str(self.g.chunks.get_loaded_area())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if command == 'players':
 | 
				
			||||||
 | 
					                if data == 'clear':
 | 
				
			||||||
 | 
					                    self.g.players = {}
 | 
				
			||||||
 | 
					                    reply = 'ok'
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    for k, v in self.g.players.items():
 | 
				
			||||||
 | 
					                        print(str(k) + ':', v, self.g.player_names[v.player_uuid])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if command == 'objects':
 | 
					            if command == 'objects':
 | 
				
			||||||
                if data == 'clear':
 | 
					                if data == 'clear':
 | 
				
			||||||
                    self.g.objects = {}
 | 
					                    self.g.objects = {}
 | 
				
			||||||
@@ -672,6 +681,37 @@ class Game:
 | 
				
			|||||||
                        self.g.job.state = self.g.job.fill_blocks
 | 
					                        self.g.job.state = self.g.job.fill_blocks
 | 
				
			||||||
                        reply = 'filling ' + str(utils.pvolume(coord1, coord2)) + ' with ' + blocks.BLOCKS[block]
 | 
					                        reply = 'filling ' + str(utils.pvolume(coord1, coord2)) + ' with ' + blocks.BLOCKS[block]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if command == 'here':
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        sender_uuid = self.g.player_names[sender]
 | 
				
			||||||
 | 
					                    except KeyError:
 | 
				
			||||||
 | 
					                        reply = 'can\'t find your uuid'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if not reply:
 | 
				
			||||||
 | 
					                        for p in self.g.players.values():
 | 
				
			||||||
 | 
					                            if p.player_uuid == sender_uuid:
 | 
				
			||||||
 | 
					                                player = p
 | 
				
			||||||
 | 
					                                break
 | 
				
			||||||
 | 
					                        else: # for
 | 
				
			||||||
 | 
					                            reply = 'can\'t find you'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if not reply:
 | 
				
			||||||
 | 
					                        pos = utils.pint(self.g.pos)
 | 
				
			||||||
 | 
					                        goal = utils.pint((p.x, p.y, p.z))
 | 
				
			||||||
 | 
					                        start = time.time()
 | 
				
			||||||
 | 
					                        navpath = self.g.world.path_to_place(pos, goal)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if navpath:
 | 
				
			||||||
 | 
					                            self.g.path = navpath
 | 
				
			||||||
 | 
					                            if self.g.job:
 | 
				
			||||||
 | 
					                                self.g.job.stop()
 | 
				
			||||||
 | 
					                            print(len(navpath))
 | 
				
			||||||
 | 
					                            print(navpath)
 | 
				
			||||||
 | 
					                            print(round(time.time() - start, 3), 'seconds')
 | 
				
			||||||
 | 
					                            reply = 'ok'
 | 
				
			||||||
 | 
					                        else:
 | 
				
			||||||
 | 
					                            reply = 'no path'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ################# Authorized commands ##########################
 | 
					            ################# Authorized commands ##########################
 | 
				
			||||||
            if authed:
 | 
					            if authed:
 | 
				
			||||||
@@ -936,6 +976,14 @@ class Game:
 | 
				
			|||||||
            mob.y += packet.delta_y / 4096.0
 | 
					            mob.y += packet.delta_y / 4096.0
 | 
				
			||||||
            mob.z += packet.delta_z / 4096.0
 | 
					            mob.z += packet.delta_z / 4096.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        player = self.g.players.get(packet.entity_id, None)
 | 
				
			||||||
 | 
					        if player:
 | 
				
			||||||
 | 
					            player.x += packet.delta_x / 4096.0
 | 
				
			||||||
 | 
					            player.y += packet.delta_y / 4096.0
 | 
				
			||||||
 | 
					            player.z += packet.delta_z / 4096.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if player.player_uuid == '0c123cfa-1697-4427-9413-4b645dee7ec0': print(packet)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def handle_entity_position_rotation(self, packet):
 | 
					    def handle_entity_position_rotation(self, packet):
 | 
				
			||||||
        mob = self.g.mobs.get(packet.entity_id, None)
 | 
					        mob = self.g.mobs.get(packet.entity_id, None)
 | 
				
			||||||
        if mob:
 | 
					        if mob:
 | 
				
			||||||
@@ -943,6 +991,14 @@ class Game:
 | 
				
			|||||||
            mob.y += packet.delta_y / 4096.0
 | 
					            mob.y += packet.delta_y / 4096.0
 | 
				
			||||||
            mob.z += packet.delta_z / 4096.0
 | 
					            mob.z += packet.delta_z / 4096.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        player = self.g.players.get(packet.entity_id, None)
 | 
				
			||||||
 | 
					        if player:
 | 
				
			||||||
 | 
					            player.x += packet.delta_x / 4096.0
 | 
				
			||||||
 | 
					            player.y += packet.delta_y / 4096.0
 | 
				
			||||||
 | 
					            player.z += packet.delta_z / 4096.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if player.player_uuid == '0c123cfa-1697-4427-9413-4b645dee7ec0': print(packet)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def handle_entity_velocity(self, packet):
 | 
					    def handle_entity_velocity(self, packet):
 | 
				
			||||||
        obj = self.g.objects.get(packet.entity_id, None)
 | 
					        obj = self.g.objects.get(packet.entity_id, None)
 | 
				
			||||||
        if obj:
 | 
					        if obj:
 | 
				
			||||||
@@ -969,6 +1025,11 @@ class Game:
 | 
				
			|||||||
        print(packet)
 | 
					        print(packet)
 | 
				
			||||||
        self.g.dimension = packet.world_name.replace('minecraft:', '')
 | 
					        self.g.dimension = packet.world_name.replace('minecraft:', '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def handle_player_list(self, packet):
 | 
				
			||||||
 | 
					        for action in packet.actions:
 | 
				
			||||||
 | 
					            if isinstance(action, packet.AddPlayerAction):
 | 
				
			||||||
 | 
					                self.g.player_names[action.uuid] = action.name
 | 
				
			||||||
 | 
					                self.g.player_names[action.name] = action.uuid # porque no los dos?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def tick(self):
 | 
					    def tick(self):
 | 
				
			||||||
        if self.g.breaking:
 | 
					        if self.g.breaking:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user