Files
minecraft-bot/tests/test_sapling_entities.py

61 lines
1.9 KiB
Python

import io
import unittest
from munch import Munch
from minecraft.networking.modern import (
ModernPlayingReactor, SetEntityDataPacket,
)
from mosfet.info import items
from mosfet.protocol.managers import EntityManager
from mosfet.world import World
def encode_varint(value):
encoded = bytearray()
while value & ~0x7F:
encoded.append((value & 0x7F) | 0x80)
value >>= 7
encoded.append(value)
return bytes(encoded)
class SaplingEntityTests(unittest.TestCase):
def test_protocol_777_item_metadata_decodes_item_stack(self):
sapling_id = items.get_id('oak_sapling')
payload = (
encode_varint(42) +
bytes((8,)) + encode_varint(7) +
encode_varint(1) + encode_varint(sapling_id) +
encode_varint(0) + encode_varint(0) +
bytes((0xFF,))
)
packet = SetEntityDataPacket()
packet.read(io.BytesIO(payload))
self.assertEqual(packet.entity_id, 42)
self.assertEqual(len(packet.item_stacks), 1)
self.assertEqual(packet.item_stacks[0].item_id, sapling_id)
self.assertIn(SetEntityDataPacket,
ModernPlayingReactor.get_clientbound_packets(None))
def test_item_metadata_makes_dropped_sapling_searchable(self):
sapling_id = items.get_id('oak_sapling')
entity = Munch(entity_id=42, x=1.0, y=65.0, z=2.0)
manager = object.__new__(EntityManager)
manager.g = Munch(objects={42: entity})
packet = Munch(
entity_id=42,
item_stacks=[Munch(present=True, item_id=sapling_id,
item_count=1)],
)
manager.handle_entity_data(packet)
found = World(Munch(objects={42: entity})).find_objects(
items.SAPLING_IDS)
self.assertEqual(found, [entity])
self.assertEqual(entity.item_count, 1)
if __name__ == '__main__':
unittest.main()