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_1 = 338,
|
||||
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 */
|
||||
|
@ -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_2: return "1.12.2";
|
||||
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");
|
||||
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_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_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:
|
||||
{
|
||||
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/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)
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
const auto Translated = PaletteUpgrade::ToItem(Palette_1_13::ToItem(ItemID));
|
||||
const auto Translated = GetItemFromProtocolID(ItemID);
|
||||
a_Item.m_ItemType = Translated.first;
|
||||
a_Item.m_ItemDamage = Translated.second;
|
||||
|
||||
@ -615,8 +628,7 @@ void cProtocol_1_13::WriteItem(cPacketizer & a_Pkt, const cItem & a_Item)
|
||||
}
|
||||
|
||||
// Normal item
|
||||
// TODO: use new item ids
|
||||
a_Pkt.WriteBEInt16(Palette_1_13::FromItem(PaletteUpgrade::FromItem(a_Item.m_ItemType, a_Item.m_ItemDamage)));
|
||||
a_Pkt.WriteBEInt16(GetProtocolIDFromItem(a_Item.m_ItemType, a_Item.m_ItemDamage));
|
||||
a_Pkt.WriteBEInt8(a_Item.m_ItemCount);
|
||||
|
||||
// TODO: NBT
|
||||
@ -1157,3 +1169,113 @@ void cProtocol_1_13::WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_Mo
|
||||
}
|
||||
} // 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:
|
||||
|
||||
cProtocol_1_13(cClientHandle * a_Client, const AString & a_ServerAddress, UInt16 a_ServerPort, UInt32 a_State);
|
||||
using Super::cProtocol_1_12_2;
|
||||
|
||||
protected:
|
||||
|
||||
@ -67,6 +67,8 @@ protected:
|
||||
|
||||
virtual UInt8 GetEntityMetadataID(eEntityMetadata a_Metadata);
|
||||
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 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 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