Add living entity packets

master
Tanner Collin 4 years ago
parent 43f4eb3517
commit 0e616dc7c1
  1. 29
      game.py
  2. 3
      monkey_patch.py
  3. 55
      protocol/packets.py
  4. 17
      protocol/types.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_spawn_living(self, packet):
print(packet)
def handle_packet(self, 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…
Cancel
Save