1.13.1, 1.13.2 connection support
This commit is contained in:
parent
1b9b587734
commit
c99ddbc376
@ -339,7 +339,9 @@ public:
|
|||||||
Version_1_12 = 335,
|
Version_1_12 = 335,
|
||||||
Version_1_12_1 = 338,
|
Version_1_12_1 = 338,
|
||||||
Version_1_12_2 = 340,
|
Version_1_12_2 = 340,
|
||||||
Version_1_13 = 393
|
Version_1_13 = 393,
|
||||||
|
Version_1_13_1 = 401,
|
||||||
|
Version_1_13_2 = 404 // TODO: this constant should be in WebServer
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Called when client sends some data */
|
/** Called when client sends some data */
|
||||||
|
@ -74,6 +74,8 @@ AString cMultiVersionProtocol::GetVersionTextFromInt(cProtocol::Version a_Protoc
|
|||||||
case cProtocol::Version::Version_1_12_1: return "1.12.1";
|
case cProtocol::Version::Version_1_12_1: return "1.12.1";
|
||||||
case cProtocol::Version::Version_1_12_2: return "1.12.2";
|
case cProtocol::Version::Version_1_12_2: return "1.12.2";
|
||||||
case cProtocol::Version::Version_1_13: return "1.13";
|
case cProtocol::Version::Version_1_13: return "1.13";
|
||||||
|
case cProtocol::Version::Version_1_13_1: return "1.13.1";
|
||||||
|
case cProtocol::Version::Version_1_13_2: return "1.13.2";
|
||||||
}
|
}
|
||||||
ASSERT(!"Unknown protocol version");
|
ASSERT(!"Unknown protocol version");
|
||||||
return Printf("Unknown protocol (%d)", a_ProtocolVersion);
|
return Printf("Unknown protocol (%d)", a_ProtocolVersion);
|
||||||
@ -295,6 +297,8 @@ std::unique_ptr<cProtocol> cMultiVersionProtocol::TryRecognizeLengthedProtocol(c
|
|||||||
case cProtocol::Version::Version_1_12_1: return std::make_unique<cProtocol_1_12_1>(&a_Client, ServerAddress, ServerPort, NextState);
|
case cProtocol::Version::Version_1_12_1: return std::make_unique<cProtocol_1_12_1>(&a_Client, ServerAddress, ServerPort, NextState);
|
||||||
case cProtocol::Version::Version_1_12_2: return std::make_unique<cProtocol_1_12_2>(&a_Client, ServerAddress, ServerPort, NextState);
|
case cProtocol::Version::Version_1_12_2: return std::make_unique<cProtocol_1_12_2>(&a_Client, ServerAddress, ServerPort, NextState);
|
||||||
case cProtocol::Version::Version_1_13: return std::make_unique<cProtocol_1_13>(&a_Client, ServerAddress, ServerPort, NextState);
|
case cProtocol::Version::Version_1_13: return std::make_unique<cProtocol_1_13>(&a_Client, ServerAddress, ServerPort, NextState);
|
||||||
|
case cProtocol::Version::Version_1_13_1: return std::make_unique<cProtocol_1_13_1>(&a_Client, ServerAddress, ServerPort, NextState);
|
||||||
|
case cProtocol::Version::Version_1_13_2: return std::make_unique<cProtocol_1_13_2>(&a_Client, ServerAddress, ServerPort, NextState);
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
LOGD("Client \"%s\" uses an unsupported protocol (lengthed, version %u (0x%x))",
|
LOGD("Client \"%s\" uses an unsupported protocol (lengthed, version %u (0x%x))",
|
||||||
|
@ -33,6 +33,7 @@ Implements the 1.13 protocol classes:
|
|||||||
|
|
||||||
#include "Palettes/Upgrade.h"
|
#include "Palettes/Upgrade.h"
|
||||||
#include "Palettes/Palette_1_13.h"
|
#include "Palettes/Palette_1_13.h"
|
||||||
|
#include "Palettes/Palette_1_13_1.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -68,14 +69,8 @@ Implements the 1.13 protocol classes:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
cProtocol_1_13::cProtocol_1_13(cClientHandle * a_Client, const AString & a_ServerAddress, UInt16 a_ServerPort, UInt32 a_State) :
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
Super(a_Client, a_ServerAddress, a_ServerPort, a_State)
|
// cProtocol_1_13:
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cProtocol_1_13::SendBlockChange(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
|
void cProtocol_1_13::SendBlockChange(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
|
||||||
{
|
{
|
||||||
@ -562,6 +557,24 @@ UInt8 cProtocol_1_13::GetEntityMetadataID(eEntityMetadataType a_FieldType)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
std::pair<short, short> cProtocol_1_13::GetItemFromProtocolID(UInt32 a_ProtocolID)
|
||||||
|
{
|
||||||
|
return PaletteUpgrade::ToItem(Palette_1_13::ToItem(a_ProtocolID));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
UInt32 cProtocol_1_13::GetProtocolIDFromItem(short a_ItemID, short a_ItemDamage)
|
||||||
|
{
|
||||||
|
return Palette_1_13::FromItem(PaletteUpgrade::FromItem(a_ItemID, a_ItemDamage));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cProtocol_1_13::ReadItem(cByteBuffer & a_ByteBuffer, cItem & a_Item, size_t a_KeepRemainingBytes)
|
bool cProtocol_1_13::ReadItem(cByteBuffer & a_ByteBuffer, cItem & a_Item, size_t a_KeepRemainingBytes)
|
||||||
{
|
{
|
||||||
HANDLE_PACKET_READ(a_ByteBuffer, ReadBEInt16, Int16, ItemID);
|
HANDLE_PACKET_READ(a_ByteBuffer, ReadBEInt16, Int16, ItemID);
|
||||||
@ -572,7 +585,7 @@ bool cProtocol_1_13::ReadItem(cByteBuffer & a_ByteBuffer, cItem & a_Item, size_t
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto Translated = PaletteUpgrade::ToItem(Palette_1_13::ToItem(ItemID));
|
const auto Translated = GetItemFromProtocolID(ItemID);
|
||||||
a_Item.m_ItemType = Translated.first;
|
a_Item.m_ItemType = Translated.first;
|
||||||
a_Item.m_ItemDamage = Translated.second;
|
a_Item.m_ItemDamage = Translated.second;
|
||||||
|
|
||||||
@ -615,8 +628,7 @@ void cProtocol_1_13::WriteItem(cPacketizer & a_Pkt, const cItem & a_Item)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Normal item
|
// Normal item
|
||||||
// TODO: use new item ids
|
a_Pkt.WriteBEInt16(GetProtocolIDFromItem(a_Item.m_ItemType, a_Item.m_ItemDamage));
|
||||||
a_Pkt.WriteBEInt16(Palette_1_13::FromItem(PaletteUpgrade::FromItem(a_Item.m_ItemType, a_Item.m_ItemDamage)));
|
|
||||||
a_Pkt.WriteBEInt8(a_Item.m_ItemCount);
|
a_Pkt.WriteBEInt8(a_Item.m_ItemCount);
|
||||||
|
|
||||||
// TODO: NBT
|
// TODO: NBT
|
||||||
@ -1157,3 +1169,113 @@ void cProtocol_1_13::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_Mo
|
|||||||
}
|
}
|
||||||
} // switch (a_Mob.GetType())
|
} // switch (a_Mob.GetType())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// cProtocol_1_13_1:
|
||||||
|
|
||||||
|
cProtocol::Version cProtocol_1_13_1::GetProtocolVersion()
|
||||||
|
{
|
||||||
|
return Version::Version_1_13_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
std::pair<short, short> cProtocol_1_13_1::GetItemFromProtocolID(UInt32 a_ProtocolID)
|
||||||
|
{
|
||||||
|
return PaletteUpgrade::ToItem(Palette_1_13_1::ToItem(a_ProtocolID));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
UInt32 cProtocol_1_13_1::GetProtocolIDFromItem(short a_ItemID, short a_ItemDamage)
|
||||||
|
{
|
||||||
|
return Palette_1_13_1::FromItem(PaletteUpgrade::FromItem(a_ItemID, a_ItemDamage));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// cProtocol_1_13_2:
|
||||||
|
|
||||||
|
cProtocol::Version cProtocol_1_13_2::GetProtocolVersion()
|
||||||
|
{
|
||||||
|
return Version::Version_1_13_2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cProtocol_1_13_2::ReadItem(cByteBuffer & a_ByteBuffer, cItem & a_Item, size_t a_KeepRemainingBytes)
|
||||||
|
{
|
||||||
|
HANDLE_PACKET_READ(a_ByteBuffer, ReadBool, bool, Present);
|
||||||
|
if (!Present)
|
||||||
|
{
|
||||||
|
// The item is empty, no more data follows
|
||||||
|
a_Item.Empty();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
HANDLE_PACKET_READ(a_ByteBuffer, ReadVarInt32, UInt32, ItemID);
|
||||||
|
const auto Translated = GetItemFromProtocolID(ItemID);
|
||||||
|
a_Item.m_ItemType = Translated.first;
|
||||||
|
a_Item.m_ItemDamage = Translated.second;
|
||||||
|
|
||||||
|
HANDLE_PACKET_READ(a_ByteBuffer, ReadBEInt8, Int8, ItemCount);
|
||||||
|
a_Item.m_ItemCount = ItemCount;
|
||||||
|
if (ItemCount <= 0)
|
||||||
|
{
|
||||||
|
a_Item.Empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
AString Metadata;
|
||||||
|
if (!a_ByteBuffer.ReadString(Metadata, a_ByteBuffer.GetReadableSpace() - a_KeepRemainingBytes - 1) || (Metadata.size() == 0) || (Metadata[0] == 0))
|
||||||
|
{
|
||||||
|
// No metadata
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ParseItemMetadata(a_Item, Metadata);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cProtocol_1_13_2::WriteItem(cPacketizer & a_Pkt, const cItem & a_Item)
|
||||||
|
{
|
||||||
|
short ItemType = a_Item.m_ItemType;
|
||||||
|
ASSERT(ItemType >= -1); // Check validity of packets in debug runtime
|
||||||
|
if (ItemType <= 0)
|
||||||
|
{
|
||||||
|
// Fix, to make sure no invalid values are sent.
|
||||||
|
ItemType = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a_Item.IsEmpty())
|
||||||
|
{
|
||||||
|
a_Pkt.WriteBool(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Item present
|
||||||
|
a_Pkt.WriteBool(true);
|
||||||
|
|
||||||
|
// Normal item
|
||||||
|
a_Pkt.WriteVarInt32(GetProtocolIDFromItem(a_Item.m_ItemType, a_Item.m_ItemDamage));
|
||||||
|
a_Pkt.WriteBEInt8(a_Item.m_ItemCount);
|
||||||
|
|
||||||
|
// TODO: NBT
|
||||||
|
a_Pkt.WriteBEInt8(0);
|
||||||
|
}
|
||||||
|
@ -35,7 +35,7 @@ class cProtocol_1_13:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
cProtocol_1_13(cClientHandle * a_Client, const AString & a_ServerAddress, UInt16 a_ServerPort, UInt32 a_State);
|
using Super::cProtocol_1_12_2;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
@ -67,6 +67,8 @@ protected:
|
|||||||
|
|
||||||
virtual UInt8 GetEntityMetadataID(eEntityMetadata a_Metadata);
|
virtual UInt8 GetEntityMetadataID(eEntityMetadata a_Metadata);
|
||||||
virtual UInt8 GetEntityMetadataID(eEntityMetadataType a_FieldType);
|
virtual UInt8 GetEntityMetadataID(eEntityMetadataType a_FieldType);
|
||||||
|
virtual std::pair<short, short> GetItemFromProtocolID(UInt32 a_ProtocolID);
|
||||||
|
virtual UInt32 GetProtocolIDFromItem(short a_ItemID, short a_ItemDamage);
|
||||||
|
|
||||||
virtual bool ReadItem(cByteBuffer & a_ByteBuffer, cItem & a_Item, size_t a_KeepRemainingBytes) override;
|
virtual bool ReadItem(cByteBuffer & a_ByteBuffer, cItem & a_Item, size_t a_KeepRemainingBytes) override;
|
||||||
virtual void WriteItem(cPacketizer & a_Pkt, const cItem & a_Item) override;
|
virtual void WriteItem(cPacketizer & a_Pkt, const cItem & a_Item) override;
|
||||||
@ -74,3 +76,45 @@ protected:
|
|||||||
virtual void WriteEntityMetadata(cPacketizer & a_Pkt, const cEntity & a_Entity) override;
|
virtual void WriteEntityMetadata(cPacketizer & a_Pkt, const cEntity & a_Entity) override;
|
||||||
virtual void WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_Mob) override;
|
virtual void WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_Mob) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class cProtocol_1_13_1 :
|
||||||
|
public cProtocol_1_13
|
||||||
|
{
|
||||||
|
using Super = cProtocol_1_13;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
using Super::cProtocol_1_13;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
/** Returns 1.13.1 */
|
||||||
|
virtual Version GetProtocolVersion() override;
|
||||||
|
virtual std::pair<short, short> GetItemFromProtocolID(UInt32 a_ProtocolID) override;
|
||||||
|
virtual UInt32 GetProtocolIDFromItem(short a_ItemID, short a_ItemDamage) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class cProtocol_1_13_2 :
|
||||||
|
public cProtocol_1_13_1
|
||||||
|
{
|
||||||
|
using Super = cProtocol_1_13_1;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
using Super::Super;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
/** Returns 1.13.2 */
|
||||||
|
virtual Version GetProtocolVersion() override;
|
||||||
|
virtual bool ReadItem(cByteBuffer & a_ByteBuffer, cItem & a_Item, size_t a_KeepRemainingBytes) override;
|
||||||
|
virtual void WriteItem(cPacketizer & a_Pkt, const cItem & a_Item) override;
|
||||||
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user