Compare commits

...

2 Commits

Author SHA1 Message Date
9966e88e9c Update ChunkDataPacket to 1.16.2 2020-09-06 00:50:47 -06:00
303612fcf1 Monkey-patch in custom packets 2020-09-05 22:19:48 -06:00
2 changed files with 31 additions and 18 deletions

View File

@ -6,18 +6,14 @@ from minecraft.networking.types import (
multi_attribute_alias, Vector, UnsignedLong multi_attribute_alias, Vector, UnsignedLong
) )
from ....types import nbt from ....types.nbt import Nbt
class ChunkDataPacket(Packet): class ChunkDataPacket(Packet):
@staticmethod id = 0x20
def get_id(context):
return 0x20 # FIXME
packet_name = 'chunk data' packet_name = 'chunk data'
fields = 'x', 'bit_mask_y', 'z', 'full_chunk' fields = 'x', 'bit_mask_y', 'z', 'full_chunk'
def read(self, file_object): def read(self, file_object):
print('reading chunk')
self.x = Integer.read(file_object) self.x = Integer.read(file_object)
self.z = Integer.read(file_object) self.z = Integer.read(file_object)
self.full_chunk = Boolean.read(file_object) self.full_chunk = Boolean.read(file_object)
@ -27,13 +23,13 @@ class ChunkDataPacket(Packet):
if self.full_chunk: if self.full_chunk:
biomes_length = VarInt.read(file_object) biomes_length = VarInt.read(file_object)
for i in range(biomes_length): for i in range(biomes_length):
self.biomes.append(Integer.read(file_object)) self.biomes.append(VarInt.read(file_object))
size = VarInt.read(file_object) size = VarInt.read(file_object)
self.data = file_object.read(size) self.data = file_object.read(size)
size_entities = VarInt.read(file_object) size_entities = VarInt.read(file_object)
self.entities = [] self.entities = []
for i in range(size_entities): #for i in range(size_entities):
self.entities.append(Nbt.read(file_object)) # self.entities.append(Nbt.read(file_object))
self.decode_chunk_data() self.decode_chunk_data()
@ -104,13 +100,11 @@ class Chunk:
self.blocks = [] self.blocks = []
mask = (1 << self.bpb)-1 mask = (1 << self.bpb)-1
bits_used = int(64 / self.bpb) * self.bpb
for i in range(4096): for i in range(4096):
l1 = int((i*self.bpb)/64) l1 = int((i*self.bpb)/bits_used)
offset = (i*self.bpb)%64 offset = (i*self.bpb)%bits_used
l2 = int(((i+1)*self.bpb-1)/64)
n = longs[l1] >> offset n = longs[l1] >> offset
if l2>l1:
n |= longs[l2] << (64-offset)
n &= mask n &= mask
if self.palette: if self.palette:
n = self.palette[n] n = self.palette[n]

View File

@ -5,13 +5,26 @@ import sys
import re import re
from optparse import OptionParser from optparse import OptionParser
from custom.managers import DataManager, ChunksManager
from custom.networking.packets.clientbound.play import chunk_data
import minecraft.networking.packets
def get_packets(old_get_packets):
def wrapper(func, context):
print('Monkey-patched.')
packets = func(context)
packets.add(chunk_data.ChunkDataPacket)
return packets
return lambda x: wrapper(old_get_packets, x)
minecraft.networking.packets.clientbound.play.get_packets = get_packets(minecraft.networking.packets.clientbound.play.get_packets)
from minecraft import authentication from minecraft import authentication
from minecraft.exceptions import YggdrasilError from minecraft.exceptions import YggdrasilError
from minecraft.networking.connection import Connection from minecraft.networking.connection import Connection
from minecraft.networking.packets import Packet, clientbound, serverbound from minecraft.networking.packets import Packet, clientbound, serverbound
from custom.managers import DataManager, ChunksManager
def get_options(): def get_options():
parser = OptionParser() parser = OptionParser()
@ -111,12 +124,18 @@ def main():
print("Message (%s): %s" % ( print("Message (%s): %s" % (
chat_packet.field_string('position'), chat_packet.json_data)) chat_packet.field_string('position'), chat_packet.json_data))
chunks = ChunksManager(mcdata) #chunks = ChunksManager(mcdata)
chunks.register(connection) #chunks.register(connection)
connection.register_packet_listener( connection.register_packet_listener(
print_chat, clientbound.play.ChatMessagePacket) print_chat, clientbound.play.ChatMessagePacket)
def handle_chunk(chunk_packet):
print(chunk_packet)
def register(self, connection):
connection.register_packet_listener(handle_chunk, chunk_data.ChunkDataPacket)
connection.connect() connection.connect()
while True: while True: