Improve trading villager selection based on profession
This commit is contained in:
@@ -304,7 +304,7 @@ class EntityMetadataPacket(Packet):
|
||||
self.metadata = []
|
||||
for _ in range(99):
|
||||
entry = Entry.read(file_object, self.context)
|
||||
if not entry: break
|
||||
if not entry: break # hit an unimplemented type, stops parsing
|
||||
self.metadata.append(entry)
|
||||
|
||||
|
||||
|
@@ -141,7 +141,7 @@ class Slot(Type):
|
||||
|
||||
|
||||
class Entry(Type):
|
||||
types = {
|
||||
simple_types = {
|
||||
0: Byte,
|
||||
1: VarInt,
|
||||
2: Float,
|
||||
@@ -169,12 +169,19 @@ class Entry(Type):
|
||||
index = UnsignedByte.read(file_object)
|
||||
if index == 0xff: return None
|
||||
type = VarInt.read(file_object)
|
||||
try:
|
||||
value = Entry.types[type].read(file_object)
|
||||
except TypeError:
|
||||
value = Entry.types[type].read_with_context(file_object, context)
|
||||
except KeyError:
|
||||
return None
|
||||
|
||||
if type == 10: # optional position
|
||||
present = Boolean.read(file_object)
|
||||
value = Position.read_with_context(file_object, context) if present else None
|
||||
elif type == 16: # villager data
|
||||
value = (VarInt.read(file_object), VarInt.read(file_object), VarInt.read(file_object))
|
||||
else:
|
||||
try:
|
||||
value = Entry.simple_types[type].read(file_object)
|
||||
except TypeError:
|
||||
value = Entry.simple_types[type].read_with_context(file_object, context)
|
||||
except KeyError:
|
||||
return None # unimplemented data type, stops parsing entries
|
||||
return Entry(index, type, value)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user