Add living entity packets
This commit is contained in:
parent
43f4eb3517
commit
0e616dc7c1
29
game.py
29
game.py
|
@ -10,7 +10,17 @@ from panda3d.core import LPoint3f
|
|||
from minecraft.networking.packets import Packet, clientbound, serverbound
|
||||
from minecraft.networking.types import BlockFace
|
||||
|
||||
from protocol.packets import TimeUpdatePacket, SetSlotPacket, PlayerDiggingPacket, BlockBreakAnimationPacket, AcknowledgePlayerDiggingPacket, HeldItemChangePacket, PickItemPacket, OpenWindowPacket, ClickWindowPacket, CloseWindowPacket, ServerWindowConfirmationPacket, ClientWindowConfirmationPacket, EntityMetadataPacket
|
||||
from protocol.packets import (
|
||||
TimeUpdatePacket, SetSlotPacket, PlayerDiggingPacket,
|
||||
BlockBreakAnimationPacket, AcknowledgePlayerDiggingPacket,
|
||||
HeldItemChangePacket, PickItemPacket, OpenWindowPacket,
|
||||
ClickWindowPacket, CloseWindowPacket, ServerWindowConfirmationPacket,
|
||||
ClientWindowConfirmationPacket, EntityMetadataPacket,
|
||||
SpawnLivingEntityPacket, EntityPositionPacket,
|
||||
EntityPositionRotationPacket,
|
||||
|
||||
)
|
||||
|
||||
from protocol.types import Slot
|
||||
|
||||
import utils
|
||||
|
@ -190,6 +200,9 @@ class Game:
|
|||
register(self.handle_window_confirmation, ClientWindowConfirmationPacket)
|
||||
register(self.handle_spawn_object, clientbound.play.SpawnObjectPacket)
|
||||
register(self.handle_entity_metadata, EntityMetadataPacket)
|
||||
register(self.handle_spawn_living, SpawnLivingEntityPacket)
|
||||
register(self.handle_entity_position, EntityPositionPacket)
|
||||
register(self.handle_entity_position_rotation, EntityPositionRotationPacket)
|
||||
|
||||
#register(self.handle_packet, Packet, early=True)
|
||||
|
||||
|
@ -497,13 +510,23 @@ class Game:
|
|||
self.g.connection.write_packet(packet2)
|
||||
|
||||
def handle_spawn_object(self, packet):
|
||||
return
|
||||
print(packet)
|
||||
print(packet.type_id)
|
||||
|
||||
def handle_entity_metadata(self, packet):
|
||||
return
|
||||
if packet.metadata and packet.metadata[0].index == 1: return
|
||||
print(packet)
|
||||
|
||||
def handle_packet(self, packet):
|
||||
def handle_spawn_living(self, packet):
|
||||
print(packet)
|
||||
|
||||
def handle_entity_position(self, packet):
|
||||
return
|
||||
print(packet)
|
||||
|
||||
def handle_entity_position_rotation(self, packet):
|
||||
return
|
||||
print(packet)
|
||||
|
||||
def tick(self):
|
||||
|
|
|
@ -21,6 +21,9 @@ def get_packets(old_get_packets):
|
|||
mc_packets.add(packets.ClientWindowConfirmationPacket)
|
||||
mc_packets.add(packets.ServerWindowConfirmationPacket)
|
||||
mc_packets.add(packets.EntityMetadataPacket)
|
||||
mc_packets.add(packets.SpawnLivingEntityPacket)
|
||||
mc_packets.add(packets.EntityPositionPacket)
|
||||
mc_packets.add(packets.EntityPositionRotationPacket)
|
||||
|
||||
return mc_packets
|
||||
return lambda x: wrapper(old_get_packets, x)
|
||||
|
|
|
@ -307,3 +307,58 @@ class EntityMetadataPacket(Packet):
|
|||
entry = Entry.read(file_object)
|
||||
if not entry: break
|
||||
self.metadata.append(entry)
|
||||
|
||||
|
||||
class SpawnLivingEntityPacket(Packet):
|
||||
# Sent by the server when a living entity is spawned
|
||||
# https://wiki.vg/Protocol#Spawn_Entity
|
||||
|
||||
id = 0x02
|
||||
packet_name = 'spawn living entity'
|
||||
|
||||
definition = [
|
||||
{'entity_id': VarInt},
|
||||
{'entity_uuid': UUID},
|
||||
{'type': VarInt},
|
||||
{'x': Double},
|
||||
{'y': Double},
|
||||
{'z': Double},
|
||||
{'yaw': Angle},
|
||||
{'pitch': Angle},
|
||||
{'head_pitch': Angle},
|
||||
{'x_velocity': Short},
|
||||
{'y_velocity': Short},
|
||||
{'z_velocity': Short},
|
||||
]
|
||||
|
||||
class EntityPositionPacket(Packet):
|
||||
# Sent by the server when an entity moves less then 8 blocks
|
||||
# https://wiki.vg/Protocol#Spawn_Entity
|
||||
|
||||
id = 0x27
|
||||
packet_name = 'entity position'
|
||||
|
||||
definition = [
|
||||
{'entity_id': VarInt},
|
||||
{'delta_x': Short},
|
||||
{'delta_y': Short},
|
||||
{'delta_z': Short},
|
||||
{'on_ground': Boolean},
|
||||
]
|
||||
|
||||
class EntityPositionRotationPacket(Packet):
|
||||
# Sent by the server when an entity rotates and moves
|
||||
# https://wiki.vg/Protocol#Entity_Position_and_Rotation
|
||||
|
||||
id = 0x28
|
||||
packet_name = 'entity position and rotation'
|
||||
|
||||
definition = [
|
||||
{'entity_id': VarInt},
|
||||
{'delta_x': Short},
|
||||
{'delta_y': Short},
|
||||
{'delta_z': Short},
|
||||
{'yaw': Angle},
|
||||
{'pitch': Angle},
|
||||
{'on_ground': Boolean},
|
||||
]
|
||||
|
|
|
@ -40,10 +40,9 @@ class Nbt(Type):
|
|||
@staticmethod
|
||||
def read(file_object):
|
||||
type_id = Byte.read(file_object)
|
||||
if type_id == TAG_End:
|
||||
return None
|
||||
if type_id != TAG_Compound:
|
||||
raise Exception("Invalid NBT header")
|
||||
#raise Exception("Invalid NBT header")
|
||||
return None
|
||||
name = ShortPrefixedByteArray.read(file_object).decode('utf-8')
|
||||
a = Nbt.decode_tag(file_object, TAG_Compound)
|
||||
a['_name'] = name
|
||||
|
@ -119,10 +118,14 @@ class Slot(Type):
|
|||
@staticmethod
|
||||
def read(file_object):
|
||||
present = Boolean.read(file_object)
|
||||
item_id = VarInt.read(file_object) if present else None
|
||||
item_count = Byte.read(file_object) if present else None
|
||||
print('slot read', present, item_id, item_count)
|
||||
nbt = Nbt.read(file_object) if present else None
|
||||
if present:
|
||||
item_id = VarInt.read(file_object)
|
||||
item_count = Byte.read(file_object)
|
||||
nbt = Nbt.read(file_object)
|
||||
else:
|
||||
item_id = None
|
||||
item_count = None
|
||||
nbt = None
|
||||
return Slot(present, item_id, item_count, nbt)
|
||||
|
||||
@staticmethod
|
||||
|
|
Loading…
Reference in New Issue
Block a user