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.packets import Packet, clientbound, serverbound
|
||||||
from minecraft.networking.types import BlockFace
|
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
|
from protocol.types import Slot
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
|
@ -190,6 +200,9 @@ class Game:
|
||||||
register(self.handle_window_confirmation, ClientWindowConfirmationPacket)
|
register(self.handle_window_confirmation, ClientWindowConfirmationPacket)
|
||||||
register(self.handle_spawn_object, clientbound.play.SpawnObjectPacket)
|
register(self.handle_spawn_object, clientbound.play.SpawnObjectPacket)
|
||||||
register(self.handle_entity_metadata, EntityMetadataPacket)
|
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)
|
#register(self.handle_packet, Packet, early=True)
|
||||||
|
|
||||||
|
@ -497,13 +510,23 @@ class Game:
|
||||||
self.g.connection.write_packet(packet2)
|
self.g.connection.write_packet(packet2)
|
||||||
|
|
||||||
def handle_spawn_object(self, packet):
|
def handle_spawn_object(self, packet):
|
||||||
|
return
|
||||||
print(packet)
|
print(packet)
|
||||||
print(packet.type_id)
|
|
||||||
|
|
||||||
def handle_entity_metadata(self, packet):
|
def handle_entity_metadata(self, packet):
|
||||||
|
return
|
||||||
|
if packet.metadata and packet.metadata[0].index == 1: return
|
||||||
print(packet)
|
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)
|
print(packet)
|
||||||
|
|
||||||
def tick(self):
|
def tick(self):
|
||||||
|
|
|
@ -21,6 +21,9 @@ def get_packets(old_get_packets):
|
||||||
mc_packets.add(packets.ClientWindowConfirmationPacket)
|
mc_packets.add(packets.ClientWindowConfirmationPacket)
|
||||||
mc_packets.add(packets.ServerWindowConfirmationPacket)
|
mc_packets.add(packets.ServerWindowConfirmationPacket)
|
||||||
mc_packets.add(packets.EntityMetadataPacket)
|
mc_packets.add(packets.EntityMetadataPacket)
|
||||||
|
mc_packets.add(packets.SpawnLivingEntityPacket)
|
||||||
|
mc_packets.add(packets.EntityPositionPacket)
|
||||||
|
mc_packets.add(packets.EntityPositionRotationPacket)
|
||||||
|
|
||||||
return mc_packets
|
return mc_packets
|
||||||
return lambda x: wrapper(old_get_packets, x)
|
return lambda x: wrapper(old_get_packets, x)
|
||||||
|
|
|
@ -307,3 +307,58 @@ class EntityMetadataPacket(Packet):
|
||||||
entry = Entry.read(file_object)
|
entry = Entry.read(file_object)
|
||||||
if not entry: break
|
if not entry: break
|
||||||
self.metadata.append(entry)
|
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
|
@staticmethod
|
||||||
def read(file_object):
|
def read(file_object):
|
||||||
type_id = Byte.read(file_object)
|
type_id = Byte.read(file_object)
|
||||||
if type_id == TAG_End:
|
|
||||||
return None
|
|
||||||
if type_id != TAG_Compound:
|
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')
|
name = ShortPrefixedByteArray.read(file_object).decode('utf-8')
|
||||||
a = Nbt.decode_tag(file_object, TAG_Compound)
|
a = Nbt.decode_tag(file_object, TAG_Compound)
|
||||||
a['_name'] = name
|
a['_name'] = name
|
||||||
|
@ -119,10 +118,14 @@ class Slot(Type):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def read(file_object):
|
def read(file_object):
|
||||||
present = Boolean.read(file_object)
|
present = Boolean.read(file_object)
|
||||||
item_id = VarInt.read(file_object) if present else None
|
if present:
|
||||||
item_count = Byte.read(file_object) if present else None
|
item_id = VarInt.read(file_object)
|
||||||
print('slot read', present, item_id, item_count)
|
item_count = Byte.read(file_object)
|
||||||
nbt = Nbt.read(file_object) if present else None
|
nbt = Nbt.read(file_object)
|
||||||
|
else:
|
||||||
|
item_id = None
|
||||||
|
item_count = None
|
||||||
|
nbt = None
|
||||||
return Slot(present, item_id, item_count, nbt)
|
return Slot(present, item_id, item_count, nbt)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
Loading…
Reference in New Issue
Block a user