1
0
Fork 0

1.13 items support

+ Add 1.16 block and item definitions
This commit is contained in:
Tiger Wang 2020-07-18 14:22:14 +01:00
parent 951a0212d8
commit 7425305154
23 changed files with 67621 additions and 90 deletions

View File

@ -158,9 +158,10 @@ target_sources(
)
set(FOLDERS
OSSupport HTTP Items Blocks Protocol Generating mbedTLS++ Bindings
WorldStorage Mobs Entities Simulator Simulator/IncrementalRedstoneSimulator
BlockEntities UI Noise
Bindings BlockEntities Blocks Entities
Generating HTTP Items mbedTLS++ Mobs Noise
OSSupport Protocol Registries Simulator
Simulator/IncrementalRedstoneSimulator UI WorldStorage
)
# Add all child source directories:

View File

@ -44,6 +44,7 @@ local g_IgnoredFiles =
"Bindings/Bindings.h",
"Bindings/Bindings.cpp",
"Bindings/LuaState_Implementation.cpp",
"Registries/Blocks.h"
}
--- The list of files not to be processed, as a dictionary (filename => true), built from g_IgnoredFiles

View File

@ -32,3 +32,5 @@ target_sources(
ProtocolRecognizer.h
RecipeMapper.h
)
add_subdirectory(Palettes)

View File

@ -5,6 +5,9 @@
#include "Protocol_1_9.h"
#include "../ByteBuffer.h"
#include "Palettes/Upgrade.h"
#include "Palettes/Palette_1_13.h"
@ -45,7 +48,7 @@ cChunkDataSerializer::cChunkDataSerializer(
const AString & cChunkDataSerializer::Serialize(int a_Version, int a_ChunkX, int a_ChunkZ, const std::map<UInt32, UInt32> & a_BlockTypeMap)
const AString & cChunkDataSerializer::Serialize(int a_Version, int a_ChunkX, int a_ChunkZ)
{
Serializations::const_iterator itr = m_Serializations.find(a_Version);
if (itr != m_Serializations.end())
@ -59,7 +62,7 @@ const AString & cChunkDataSerializer::Serialize(int a_Version, int a_ChunkX, int
case RELEASE_1_8_0: Serialize47 (data, a_ChunkX, a_ChunkZ); break;
case RELEASE_1_9_0: Serialize107(data, a_ChunkX, a_ChunkZ); break;
case RELEASE_1_9_4: Serialize110(data, a_ChunkX, a_ChunkZ); break;
case RELEASE_1_13: Serialize393(data, a_ChunkX, a_ChunkZ, a_BlockTypeMap); break;
case RELEASE_1_13: Serialize393(data, a_ChunkX, a_ChunkZ); break;
default:
{
@ -434,12 +437,10 @@ void cChunkDataSerializer::Serialize110(AString & a_Data, int a_ChunkX, int a_Ch
void cChunkDataSerializer::Serialize393(AString & a_Data, int a_ChunkX, int a_ChunkZ, const std::map<UInt32, UInt32> & a_BlockTypeMap)
void cChunkDataSerializer::Serialize393(AString & a_Data, int a_ChunkX, int a_ChunkZ)
{
// This function returns the fully compressed packet (including packet size), not the raw packet!
ASSERT(!a_BlockTypeMap.empty()); // We need a protocol-specific translation map
// Create the packet:
cByteBuffer Packet(512 KiB);
Packet.WriteVarInt32(0x22); // Packet id (Chunk Data packet)
@ -485,8 +486,7 @@ void cChunkDataSerializer::Serialize393(AString & a_Data, int a_ChunkX, int a_Ch
{
UInt32 blockType = a_Section.m_BlockTypes[Index];
UInt32 blockMeta = (a_Section.m_BlockMetas[Index / 2] >> ((Index % 2) * 4)) & 0x0f;
auto itr = a_BlockTypeMap.find(blockType * 16 | blockMeta);
UInt64 Value = (itr == a_BlockTypeMap.end()) ? 0 :itr->second;
UInt64 Value = Palette_1_13::FromBlock(PaletteUpgrade::FromBlock(blockType, blockMeta));
Value &= Mask; // It shouldn't go out of bounds, but it's still worth being careful
// Painful part where we write data into the long array. Based off of the normal code.

View File

@ -13,6 +13,7 @@ other clients using the same protocol. */
class cChunkDataSerializer
{
public:
enum
{
RELEASE_1_8_0 = 47,
@ -27,17 +28,13 @@ public:
const eDimension a_Dimension
);
/** Serializes the contained chunk data into the specified protocol version.
TEMPORARY: a_BlockTypeMap is used for the 1.13+ protocols to map from BLOCKTYPE#META to NetBlockID.
a_BlockTypeMap is ignored for pre-1.13 protocols. */
const AString & Serialize(int a_Version, int a_ChunkX, int a_ChunkZ, const std::map<UInt32, UInt32> & a_BlockTypeMap);
/** Serializes the contained chunk data into the specified protocol version. */
const AString & Serialize(int a_Version, int a_ChunkX, int a_ChunkZ);
protected:
using Serializations = std::map<int, AString>;
/** The data read from the chunk, to be serialized. */
const cChunkData & m_Data;
@ -50,11 +47,10 @@ protected:
/** The per-protocol serialized data, cached for reuse for other clients. */
Serializations m_Serializations;
void Serialize47 (AString & a_Data, int a_ChunkX, int a_ChunkZ); // Release 1.8
void Serialize107(AString & a_Data, int a_ChunkX, int a_ChunkZ); // Release 1.9
void Serialize110(AString & a_Data, int a_ChunkX, int a_ChunkZ); // Release 1.9.4
void Serialize393(AString & a_Data, int a_ChunkX, int a_ChunkZ, const std::map<UInt32, UInt32> & a_BlockTypeMap); // Release 1.13
void Serialize393(AString & a_Data, int a_ChunkX, int a_ChunkZ); // Release 1.13
} ;

View File

@ -0,0 +1,11 @@
target_sources(
${CMAKE_PROJECT_NAME} PRIVATE
Palette_1_13.cpp
Palette_1_16.cpp
Upgrade.cpp
Palette_1_13.h
Palette_1_16.h
Upgrade.h
)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
#pragma once
#include "../../Registries/Items.h"
namespace Palette_1_13
{
Int32 FromBlock(short ID);
Int32 FromItem(Item ID);
Item ToItem(Int32 ID);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
#pragma once
#include "../../Registries/Items.h"
namespace Palette_1_16
{
Int32 FromBlock(short ID);
Int32 FromItem(Item ID);
Item ToItem(Int32 ID);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
#pragma once
#include "../../BlockType.h"
#include "../../Registries/Items.h"
namespace PaletteUpgrade
{
short FromBlock(BLOCKTYPE Block, NIBBLETYPE Meta);
Item FromItem(short Item, short Meta);
std::pair<short, short> ToItem(Item ID);
}

View File

@ -57,12 +57,6 @@ public:
virtual ~cProtocol() {}
/** Called after construction so that the protocol class can initialize itself.
Throws a std::exception descendant on failure; the client is kicked
with the exception's message as a result. */
virtual void Initialize(cClientHandle & a_Client) {}
/** Logical types of outgoing packets.
These values get translated to on-wire packet IDs in GetPacketID(), specific for each protocol.
This is mainly useful for protocol sub-versions that re-number the packets while using mostly the same packet layout. */

View File

@ -228,9 +228,6 @@ void cMultiVersionProtocol::TryRecognizeProtocol(cClientHandle & a_Client, std::
m_Protocol = TryRecognizeLengthedProtocol(a_Client, a_Data);
ASSERT(m_Protocol != nullptr);
// The protocol has been recognized, initialize it:
m_Protocol->Initialize(a_Client);
}

View File

@ -11,7 +11,6 @@ Implements the 1.13 protocol classes:
#include "ProtocolRecognizer.h"
#include "ChunkDataSerializer.h"
#include "Packetizer.h"
#include "ProtocolPalettes.h"
#include "../Entities/Boat.h"
#include "../Entities/Minecart.h"
@ -24,7 +23,6 @@ Implements the 1.13 protocol classes:
#include "../Mobs/IncludeAllMonsters.h"
#include "../BlockTypePalette.h"
#include "../ClientHandle.h"
#include "../Root.h"
#include "../Server.h"
@ -33,6 +31,9 @@ Implements the 1.13 protocol classes:
#include "../Bindings/PluginManager.h"
#include "Palettes/Upgrade.h"
#include "Palettes/Palette_1_13.h"
@ -76,41 +77,13 @@ cProtocol_1_13::cProtocol_1_13(cClientHandle * a_Client, const AString & a_Serve
void cProtocol_1_13::Initialize(cClientHandle & a_Client)
{
// Get the palettes; fail if not available:
auto paletteVersion = this->GetPaletteVersion();
m_BlockTypePalette = cRoot::Get()->GetProtocolPalettes().blockTypePalette(paletteVersion);
if (m_BlockTypePalette == nullptr)
{
throw std::runtime_error(Printf("This server doesn't support protocol %s.", paletteVersion));
}
// Process the palette into the temporary BLOCKTYPE -> NetBlockID map:
auto upg = cRoot::Get()->GetUpgradeBlockTypePalette();
m_BlockTypeMap = m_BlockTypePalette->createTransformMapWithFallback(upg, 0);
}
AString cProtocol_1_13::GetPaletteVersion() const
{
return "1.13";
}
void cProtocol_1_13::SendBlockChange(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
{
ASSERT(m_State == 3); // In game mode?
cPacketizer Pkt(*this, pktBlockChange);
Pkt.WritePosition64(a_BlockX, a_BlockY, a_BlockZ);
Pkt.WriteVarInt32(static_cast<UInt32>(a_BlockType)); // TODO: Palette
Pkt.WriteVarInt32(static_cast<UInt32>(Palette_1_13::FromBlock(PaletteUpgrade::FromBlock(a_BlockType, a_BlockMeta)))); // TODO: Palette
}
@ -129,7 +102,7 @@ void cProtocol_1_13::SendBlockChanges(int a_ChunkX, int a_ChunkZ, const sSetBloc
{
Int16 Coords = static_cast<Int16>(itr->m_RelY | (itr->m_RelZ << 8) | (itr->m_RelX << 12));
Pkt.WriteBEInt16(Coords);
Pkt.WriteVarInt32(static_cast<UInt32>(itr->m_BlockType)); // TODO: Palette
Pkt.WriteVarInt32(static_cast<UInt32>(Palette_1_13::FromBlock(PaletteUpgrade::FromBlock(itr->m_BlockType, itr->m_BlockMeta)))); // TODO: Palette
} // for itr - a_Changes[]
}
@ -141,7 +114,7 @@ void cProtocol_1_13::SendChunkData(int a_ChunkX, int a_ChunkZ, cChunkDataSeriali
{
ASSERT(m_State == 3); // In game mode?
const AString & ChunkData = a_Serializer.Serialize(cChunkDataSerializer::RELEASE_1_13, a_ChunkX, a_ChunkZ, m_BlockTypeMap);
const AString & ChunkData = a_Serializer.Serialize(cChunkDataSerializer::RELEASE_1_13, a_ChunkX, a_ChunkZ);
cCSLock Lock(m_CSPacket);
SendData(ChunkData.data(), ChunkData.size());
}
@ -582,8 +555,10 @@ UInt8 cProtocol_1_13::GetEntityMetadataID(eEntityMetadata a_Metadata)
case eEntityMetadata::AreaEffectCloudParticleParameter1:
case eEntityMetadata::AreaEffectCloudParticleParameter2:
case eEntityMetadata::AbstractSkeletonArmsSwinging:
case eEntityMetadata::ZombieUnusedWasType: UNREACHABLE("Retrieved invalid metadata for protocol");
case eEntityMetadata::ZombieUnusedWasType: break;
}
UNREACHABLE("Retrieved invalid metadata for protocol");
}
@ -614,6 +589,8 @@ UInt8 cProtocol_1_13::GetEntityMetadataID(eEntityMetadataType a_FieldType)
case eEntityMetadataType::OptVarInt: return 17;
case eEntityMetadataType::Pose: return 18;
}
UNREACHABLE("Translated invalid metadata type for protocol");
}
@ -622,18 +599,20 @@ UInt8 cProtocol_1_13::GetEntityMetadataID(eEntityMetadataType a_FieldType)
bool cProtocol_1_13::ReadItem(cByteBuffer & a_ByteBuffer, cItem & a_Item, size_t a_KeepRemainingBytes)
{
HANDLE_PACKET_READ(a_ByteBuffer, ReadBEInt16, Int16, ItemType);
if (ItemType == -1)
HANDLE_PACKET_READ(a_ByteBuffer, ReadBEInt16, Int16, ItemID);
if (ItemID == -1)
{
// The item is empty, no more data follows
a_Item.Empty();
return true;
}
a_Item.m_ItemType = ItemType;
const auto Translated = PaletteUpgrade::ToItem(Palette_1_13::ToItem(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;
a_Item.m_ItemDamage = 0; // o no, no more damage in 1.13
if (ItemCount <= 0)
{
a_Item.Empty();
@ -672,7 +651,7 @@ void cProtocol_1_13::WriteItem(cPacketizer & a_Pkt, const cItem & a_Item)
// Normal item
// TODO: use new item ids
a_Pkt.WriteBEInt16(ItemType);
a_Pkt.WriteBEInt16(Palette_1_13::FromItem(PaletteUpgrade::FromItem(a_Item.m_ItemType, a_Item.m_ItemDamage)));
a_Pkt.WriteBEInt8(a_Item.m_ItemCount);
// TODO: NBT
@ -745,11 +724,8 @@ void cProtocol_1_13::WriteEntityMetadata(cPacketizer & a_Pkt, const cEntity & a_
}
case cEntity::etPickup:
{
/* TODO
a_Pkt.WriteBEUInt8(ITEM_ITEM);
a_Pkt.WriteBEUInt8(METADATA_TYPE_ITEM);
WriteEntityMetadata(a_Pkt, eEntityMetadata::ItemItem, eEntityMetadataType::Item);
WriteItem(a_Pkt, static_cast<const cPickup &>(a_Entity).GetItem());
*/
break;
}
case cEntity::etMinecart:

View File

@ -37,14 +37,8 @@ public:
cProtocol_1_13(cClientHandle * a_Client, const AString & a_ServerAddress, UInt16 a_ServerPort, UInt32 a_State);
virtual void Initialize(cClientHandle & a_Client) override;
protected:
/** Returns the string identifying the palettes' version, such as "1.13" or "1.14.4".
The palettes for that version are loaded into m_BlockTypePalette and m_ItemTypePalette. */
virtual AString GetPaletteVersion() const;
// Packet sending:
virtual void SendBlockChange (int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override;
virtual void SendBlockChanges (int a_ChunkX, int a_ChunkZ, const sSetBlockVector & a_Changes) override;
@ -77,13 +71,4 @@ protected:
virtual void WriteEntityMetadata(cPacketizer & a_Pkt, const eEntityMetadata a_Metadata, const eEntityMetadataType a_FieldType);
virtual void WriteEntityMetadata(cPacketizer & a_Pkt, const cEntity & a_Entity) override;
virtual void WriteMobMetadata(cPacketizer & a_Pkt, const cMonster & a_Mob) override;
private:
/** The palette used to transform internal block type palette into the protocol-specific ID. */
std::shared_ptr<const BlockTypePalette> m_BlockTypePalette;
/** Temporary hack for initial 1.13+ support while keeping BLOCKTYPE data:
Map of the BLOCKTYPE#META to the protocol-specific NetBlockID. */
std::map<UInt32, UInt32> m_BlockTypeMap;
};

View File

@ -335,7 +335,7 @@ void cProtocol_1_8_0::SendChunkData(int a_ChunkX, int a_ChunkZ, cChunkDataSerial
// Serialize first, before creating the Packetizer (the packetizer locks a CS)
// This contains the flags and bitmasks, too
const AString & ChunkData = a_Serializer.Serialize(cChunkDataSerializer::RELEASE_1_8_0, a_ChunkX, a_ChunkZ, {});
const AString & ChunkData = a_Serializer.Serialize(cChunkDataSerializer::RELEASE_1_8_0, a_ChunkX, a_ChunkZ);
cCSLock Lock(m_CSPacket);
SendData(ChunkData.data(), ChunkData.size());

View File

@ -112,7 +112,7 @@ void cProtocol_1_9_0::SendChunkData(int a_ChunkX, int a_ChunkZ, cChunkDataSerial
// Serialize first, before creating the Packetizer (the packetizer locks a CS)
// This contains the flags and bitmasks, too
const AString & ChunkData = a_Serializer.Serialize(cChunkDataSerializer::RELEASE_1_9_0, a_ChunkX, a_ChunkZ, {});
const AString & ChunkData = a_Serializer.Serialize(cChunkDataSerializer::RELEASE_1_9_0, a_ChunkX, a_ChunkZ);
cCSLock Lock(m_CSPacket);
SendData(ChunkData.data(), ChunkData.size());
@ -2416,7 +2416,7 @@ void cProtocol_1_9_4::SendChunkData(int a_ChunkX, int a_ChunkZ, cChunkDataSerial
// Serialize first, before creating the Packetizer (the packetizer locks a CS)
// This contains the flags and bitmasks, too
const AString & ChunkData = a_Serializer.Serialize(cChunkDataSerializer::RELEASE_1_9_4, a_ChunkX, a_ChunkZ, {});
const AString & ChunkData = a_Serializer.Serialize(cChunkDataSerializer::RELEASE_1_9_4, a_ChunkX, a_ChunkZ);
cCSLock Lock(m_CSPacket);
SendData(ChunkData.data(), ChunkData.size());

15133
src/Registries/Blocks.cpp Normal file

File diff suppressed because one or more lines are too long

25809
src/Registries/Blocks.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
target_sources(
${CMAKE_PROJECT_NAME} PRIVATE
Blocks.cpp
Blocks.h
Items.h
)

980
src/Registries/Items.h Normal file
View File

@ -0,0 +1,980 @@
#pragma once
enum class Item
{
AcaciaBoat,
AcaciaButton,
AcaciaDoor,
AcaciaFence,
AcaciaFenceGate,
AcaciaLeaves,
AcaciaLog,
AcaciaPlanks,
AcaciaPressurePlate,
AcaciaSapling,
AcaciaSign,
AcaciaSlab,
AcaciaStairs,
AcaciaTrapdoor,
AcaciaWood,
ActivatorRail,
Air,
Allium,
AncientDebris,
Andesite,
AndesiteSlab,
AndesiteStairs,
AndesiteWall,
Anvil,
Apple,
ArmorStand,
Arrow,
AzureBluet,
BakedPotato,
Bamboo,
Barrel,
Barrier,
Basalt,
BatSpawnEgg,
Beacon,
Bedrock,
BeeNest,
BeeSpawnEgg,
Beef,
Beehive,
Beetroot,
BeetrootSeeds,
BeetrootSoup,
Bell,
BirchBoat,
BirchButton,
BirchDoor,
BirchFence,
BirchFenceGate,
BirchLeaves,
BirchLog,
BirchPlanks,
BirchPressurePlate,
BirchSapling,
BirchSign,
BirchSlab,
BirchStairs,
BirchTrapdoor,
BirchWood,
BlackBanner,
BlackBed,
BlackCarpet,
BlackConcrete,
BlackConcretePowder,
BlackDye,
BlackGlazedTerracotta,
BlackShulkerBox,
BlackStainedGlass,
BlackStainedGlassPane,
BlackTerracotta,
BlackWool,
Blackstone,
BlackstoneSlab,
BlackstoneStairs,
BlackstoneWall,
BlastFurnace,
BlazePowder,
BlazeRod,
BlazeSpawnEgg,
BlueBanner,
BlueBed,
BlueCarpet,
BlueConcrete,
BlueConcretePowder,
BlueDye,
BlueGlazedTerracotta,
BlueIce,
BlueOrchid,
BlueShulkerBox,
BlueStainedGlass,
BlueStainedGlassPane,
BlueTerracotta,
BlueWool,
Bone,
BoneBlock,
BoneMeal,
Book,
Bookshelf,
Bow,
Bowl,
BrainCoral,
BrainCoralBlock,
BrainCoralFan,
Bread,
BrewingStand,
Brick,
BrickSlab,
BrickStairs,
BrickWall,
Bricks,
BrownBanner,
BrownBed,
BrownCarpet,
BrownConcrete,
BrownConcretePowder,
BrownDye,
BrownGlazedTerracotta,
BrownMushroom,
BrownMushroomBlock,
BrownShulkerBox,
BrownStainedGlass,
BrownStainedGlassPane,
BrownTerracotta,
BrownWool,
BubbleCoral,
BubbleCoralBlock,
BubbleCoralFan,
Bucket,
Cactus,
Cake,
Campfire,
Carrot,
CarrotOnAStick,
CartographyTable,
CarvedPumpkin,
CatSpawnEgg,
Cauldron,
CaveSpiderSpawnEgg,
Chain,
ChainCommandBlock,
ChainmailBoots,
ChainmailChestplate,
ChainmailHelmet,
ChainmailLeggings,
Charcoal,
Chest,
ChestMinecart,
Chicken,
ChickenSpawnEgg,
ChippedAnvil,
ChiseledNetherBricks,
ChiseledPolishedBlackstone,
ChiseledQuartzBlock,
ChiseledRedSandstone,
ChiseledSandstone,
ChiseledStoneBricks,
ChorusFlower,
ChorusFruit,
ChorusPlant,
Clay,
ClayBall,
Clock,
Coal,
CoalBlock,
CoalOre,
CoarseDirt,
Cobblestone,
CobblestoneSlab,
CobblestoneStairs,
CobblestoneWall,
Cobweb,
CocoaBeans,
Cod,
CodBucket,
CodSpawnEgg,
CommandBlock,
CommandBlockMinecart,
Comparator,
Compass,
Composter,
Conduit,
CookedBeef,
CookedChicken,
CookedCod,
CookedMutton,
CookedPorkchop,
CookedRabbit,
CookedSalmon,
Cookie,
Cornflower,
CowSpawnEgg,
CrackedNetherBricks,
CrackedPolishedBlackstoneBricks,
CrackedStoneBricks,
CraftingTable,
CreeperBannerPattern,
CreeperHead,
CreeperSpawnEgg,
CrimsonButton,
CrimsonDoor,
CrimsonFence,
CrimsonFenceGate,
CrimsonFungus,
CrimsonHyphae,
CrimsonNylium,
CrimsonPlanks,
CrimsonPressurePlate,
CrimsonRoots,
CrimsonSign,
CrimsonSlab,
CrimsonStairs,
CrimsonStem,
CrimsonTrapdoor,
Crossbow,
CryingObsidian,
CutRedSandstone,
CutRedSandstoneSlab,
CutSandstone,
CutSandstoneSlab,
CyanBanner,
CyanBed,
CyanCarpet,
CyanConcrete,
CyanConcretePowder,
CyanDye,
CyanGlazedTerracotta,
CyanShulkerBox,
CyanStainedGlass,
CyanStainedGlassPane,
CyanTerracotta,
CyanWool,
DamagedAnvil,
Dandelion,
DarkOakBoat,
DarkOakButton,
DarkOakDoor,
DarkOakFence,
DarkOakFenceGate,
DarkOakLeaves,
DarkOakLog,
DarkOakPlanks,
DarkOakPressurePlate,
DarkOakSapling,
DarkOakSign,
DarkOakSlab,
DarkOakStairs,
DarkOakTrapdoor,
DarkOakWood,
DarkPrismarine,
DarkPrismarineSlab,
DarkPrismarineStairs,
DaylightDetector,
DeadBrainCoral,
DeadBrainCoralBlock,
DeadBrainCoralFan,
DeadBubbleCoral,
DeadBubbleCoralBlock,
DeadBubbleCoralFan,
DeadBush,
DeadFireCoral,
DeadFireCoralBlock,
DeadFireCoralFan,
DeadHornCoral,
DeadHornCoralBlock,
DeadHornCoralFan,
DeadTubeCoral,
DeadTubeCoralBlock,
DeadTubeCoralFan,
DebugStick,
DetectorRail,
Diamond,
DiamondAxe,
DiamondBlock,
DiamondBoots,
DiamondChestplate,
DiamondHelmet,
DiamondHoe,
DiamondHorseArmor,
DiamondLeggings,
DiamondOre,
DiamondPickaxe,
DiamondShovel,
DiamondSword,
Diorite,
DioriteSlab,
DioriteStairs,
DioriteWall,
Dirt,
Dispenser,
DolphinSpawnEgg,
DonkeySpawnEgg,
DragonBreath,
DragonEgg,
DragonHead,
DriedKelp,
DriedKelpBlock,
Dropper,
DrownedSpawnEgg,
Egg,
ElderGuardianSpawnEgg,
Elytra,
Emerald,
EmeraldBlock,
EmeraldOre,
EnchantedBook,
EnchantedGoldenApple,
EnchantingTable,
EndCrystal,
EndPortalFrame,
EndRod,
EndStone,
EndStoneBrickSlab,
EndStoneBrickStairs,
EndStoneBrickWall,
EndStoneBricks,
EnderChest,
EnderEye,
EnderPearl,
EndermanSpawnEgg,
EndermiteSpawnEgg,
EvokerSpawnEgg,
ExperienceBottle,
Farmland,
Feather,
FermentedSpiderEye,
Fern,
FilledMap,
FireCharge,
FireCoral,
FireCoralBlock,
FireCoralFan,
FireworkRocket,
FireworkStar,
FishingRod,
FletchingTable,
Flint,
FlintAndSteel,
FlowerBannerPattern,
FlowerPot,
FoxSpawnEgg,
Furnace,
FurnaceMinecart,
GhastSpawnEgg,
GhastTear,
GildedBlackstone,
Glass,
GlassBottle,
GlassPane,
GlisteringMelonSlice,
GlobeBannerPattern,
Glowstone,
GlowstoneDust,
GoldBlock,
GoldIngot,
GoldNugget,
GoldOre,
GoldenApple,
GoldenAxe,
GoldenBoots,
GoldenCarrot,
GoldenChestplate,
GoldenHelmet,
GoldenHoe,
GoldenHorseArmor,
GoldenLeggings,
GoldenPickaxe,
GoldenShovel,
GoldenSword,
Granite,
GraniteSlab,
GraniteStairs,
GraniteWall,
Grass,
GrassBlock,
GrassPath,
Gravel,
GrayBanner,
GrayBed,
GrayCarpet,
GrayConcrete,
GrayConcretePowder,
GrayDye,
GrayGlazedTerracotta,
GrayShulkerBox,
GrayStainedGlass,
GrayStainedGlassPane,
GrayTerracotta,
GrayWool,
GreenBanner,
GreenBed,
GreenCarpet,
GreenConcrete,
GreenConcretePowder,
GreenDye,
GreenGlazedTerracotta,
GreenShulkerBox,
GreenStainedGlass,
GreenStainedGlassPane,
GreenTerracotta,
GreenWool,
Grindstone,
GuardianSpawnEgg,
Gunpowder,
HayBale,
HeartOfTheSea,
HeavyWeightedPressurePlate,
HoglinSpawnEgg,
HoneyBlock,
HoneyBottle,
Honeycomb,
HoneycombBlock,
Hopper,
HopperMinecart,
HornCoral,
HornCoralBlock,
HornCoralFan,
HorseSpawnEgg,
HuskSpawnEgg,
Ice,
InfestedChiseledStoneBricks,
InfestedCobblestone,
InfestedCrackedStoneBricks,
InfestedMossyStoneBricks,
InfestedStone,
InfestedStoneBricks,
InkSac,
IronAxe,
IronBars,
IronBlock,
IronBoots,
IronChestplate,
IronDoor,
IronHelmet,
IronHoe,
IronHorseArmor,
IronIngot,
IronLeggings,
IronNugget,
IronOre,
IronPickaxe,
IronShovel,
IronSword,
IronTrapdoor,
ItemFrame,
JackOLantern,
Jigsaw,
Jukebox,
JungleBoat,
JungleButton,
JungleDoor,
JungleFence,
JungleFenceGate,
JungleLeaves,
JungleLog,
JunglePlanks,
JunglePressurePlate,
JungleSapling,
JungleSign,
JungleSlab,
JungleStairs,
JungleTrapdoor,
JungleWood,
Kelp,
KnowledgeBook,
Ladder,
Lantern,
LapisBlock,
LapisLazuli,
LapisOre,
LargeFern,
LavaBucket,
Lead,
Leather,
LeatherBoots,
LeatherChestplate,
LeatherHelmet,
LeatherHorseArmor,
LeatherLeggings,
Lectern,
Lever,
LightBlueBanner,
LightBlueBed,
LightBlueCarpet,
LightBlueConcrete,
LightBlueConcretePowder,
LightBlueDye,
LightBlueGlazedTerracotta,
LightBlueShulkerBox,
LightBlueStainedGlass,
LightBlueStainedGlassPane,
LightBlueTerracotta,
LightBlueWool,
LightGrayBanner,
LightGrayBed,
LightGrayCarpet,
LightGrayConcrete,
LightGrayConcretePowder,
LightGrayDye,
LightGrayGlazedTerracotta,
LightGrayShulkerBox,
LightGrayStainedGlass,
LightGrayStainedGlassPane,
LightGrayTerracotta,
LightGrayWool,
LightWeightedPressurePlate,
Lilac,
LilyOfTheValley,
LilyPad,
LimeBanner,
LimeBed,
LimeCarpet,
LimeConcrete,
LimeConcretePowder,
LimeDye,
LimeGlazedTerracotta,
LimeShulkerBox,
LimeStainedGlass,
LimeStainedGlassPane,
LimeTerracotta,
LimeWool,
LingeringPotion,
LlamaSpawnEgg,
Lodestone,
Loom,
MagentaBanner,
MagentaBed,
MagentaCarpet,
MagentaConcrete,
MagentaConcretePowder,
MagentaDye,
MagentaGlazedTerracotta,
MagentaShulkerBox,
MagentaStainedGlass,
MagentaStainedGlassPane,
MagentaTerracotta,
MagentaWool,
MagmaBlock,
MagmaCream,
MagmaCubeSpawnEgg,
Map,
Melon,
MelonSeeds,
MelonSlice,
MilkBucket,
Minecart,
MojangBannerPattern,
MooshroomSpawnEgg,
MossyCobblestone,
MossyCobblestoneSlab,
MossyCobblestoneStairs,
MossyCobblestoneWall,
MossyStoneBrickSlab,
MossyStoneBrickStairs,
MossyStoneBrickWall,
MossyStoneBricks,
MuleSpawnEgg,
MushroomStem,
MushroomStew,
MusicDiscBlocks,
MusicDiscCat,
MusicDiscChirp,
MusicDiscFar,
MusicDiscMall,
MusicDiscMellohi,
MusicDiscPigstep,
MusicDiscStal,
MusicDiscStrad,
MusicDiscWait,
MusicDiscWard,
MusicDisc11,
MusicDisc13,
Mutton,
Mycelium,
NameTag,
NautilusShell,
NetherBrick,
NetherBrickFence,
NetherBrickSlab,
NetherBrickStairs,
NetherBrickWall,
NetherBricks,
NetherGoldOre,
NetherQuartzOre,
NetherSprouts,
NetherStar,
NetherWart,
NetherWartBlock,
NetheriteAxe,
NetheriteBlock,
NetheriteBoots,
NetheriteChestplate,
NetheriteHelmet,
NetheriteHoe,
NetheriteIngot,
NetheriteLeggings,
NetheritePickaxe,
NetheriteScrap,
NetheriteShovel,
NetheriteSword,
Netherrack,
NoteBlock,
OakBoat,
OakButton,
OakDoor,
OakFence,
OakFenceGate,
OakLeaves,
OakLog,
OakPlanks,
OakPressurePlate,
OakSapling,
OakSign,
OakSlab,
OakStairs,
OakTrapdoor,
OakWood,
Observer,
Obsidian,
OcelotSpawnEgg,
OrangeBanner,
OrangeBed,
OrangeCarpet,
OrangeConcrete,
OrangeConcretePowder,
OrangeDye,
OrangeGlazedTerracotta,
OrangeShulkerBox,
OrangeStainedGlass,
OrangeStainedGlassPane,
OrangeTerracotta,
OrangeTulip,
OrangeWool,
OxeyeDaisy,
PackedIce,
Painting,
PandaSpawnEgg,
Paper,
ParrotSpawnEgg,
Peony,
PetrifiedOakSlab,
PhantomMembrane,
PhantomSpawnEgg,
PigSpawnEgg,
PiglinBannerPattern,
PiglinSpawnEgg,
PillagerSpawnEgg,
PinkBanner,
PinkBed,
PinkCarpet,
PinkConcrete,
PinkConcretePowder,
PinkDye,
PinkGlazedTerracotta,
PinkShulkerBox,
PinkStainedGlass,
PinkStainedGlassPane,
PinkTerracotta,
PinkTulip,
PinkWool,
Piston,
PlayerHead,
Podzol,
PoisonousPotato,
PolarBearSpawnEgg,
PolishedAndesite,
PolishedAndesiteSlab,
PolishedAndesiteStairs,
PolishedBasalt,
PolishedBlackstone,
PolishedBlackstoneBrickSlab,
PolishedBlackstoneBrickStairs,
PolishedBlackstoneBrickWall,
PolishedBlackstoneBricks,
PolishedBlackstoneButton,
PolishedBlackstonePressurePlate,
PolishedBlackstoneSlab,
PolishedBlackstoneStairs,
PolishedBlackstoneWall,
PolishedDiorite,
PolishedDioriteSlab,
PolishedDioriteStairs,
PolishedGranite,
PolishedGraniteSlab,
PolishedGraniteStairs,
PoppedChorusFruit,
Poppy,
Porkchop,
Potato,
Potion,
PoweredRail,
Prismarine,
PrismarineBrickSlab,
PrismarineBrickStairs,
PrismarineBricks,
PrismarineCrystals,
PrismarineShard,
PrismarineSlab,
PrismarineStairs,
PrismarineWall,
Pufferfish,
PufferfishBucket,
PufferfishSpawnEgg,
Pumpkin,
PumpkinPie,
PumpkinSeeds,
PurpleBanner,
PurpleBed,
PurpleCarpet,
PurpleConcrete,
PurpleConcretePowder,
PurpleDye,
PurpleGlazedTerracotta,
PurpleShulkerBox,
PurpleStainedGlass,
PurpleStainedGlassPane,
PurpleTerracotta,
PurpleWool,
PurpurBlock,
PurpurPillar,
PurpurSlab,
PurpurStairs,
Quartz,
QuartzBlock,
QuartzBricks,
QuartzPillar,
QuartzSlab,
QuartzStairs,
Rabbit,
RabbitFoot,
RabbitHide,
RabbitSpawnEgg,
RabbitStew,
Rail,
RavagerSpawnEgg,
RedBanner,
RedBed,
RedCarpet,
RedConcrete,
RedConcretePowder,
RedDye,
RedGlazedTerracotta,
RedMushroom,
RedMushroomBlock,
RedNetherBrickSlab,
RedNetherBrickStairs,
RedNetherBrickWall,
RedNetherBricks,
RedSand,
RedSandstone,
RedSandstoneSlab,
RedSandstoneStairs,
RedSandstoneWall,
RedShulkerBox,
RedStainedGlass,
RedStainedGlassPane,
RedTerracotta,
RedTulip,
RedWool,
Redstone,
RedstoneBlock,
RedstoneLamp,
RedstoneOre,
RedstoneTorch,
Repeater,
RepeatingCommandBlock,
RespawnAnchor,
RoseBush,
RottenFlesh,
Saddle,
Salmon,
SalmonBucket,
SalmonSpawnEgg,
Sand,
Sandstone,
SandstoneSlab,
SandstoneStairs,
SandstoneWall,
Scaffolding,
Scute,
SeaLantern,
SeaPickle,
Seagrass,
Shears,
SheepSpawnEgg,
Shield,
Shroomlight,
ShulkerBox,
ShulkerShell,
ShulkerSpawnEgg,
SilverfishSpawnEgg,
SkeletonHorseSpawnEgg,
SkeletonSkull,
SkeletonSpawnEgg,
SkullBannerPattern,
SlimeBall,
SlimeBlock,
SlimeSpawnEgg,
SmithingTable,
Smoker,
SmoothQuartz,
SmoothQuartzSlab,
SmoothQuartzStairs,
SmoothRedSandstone,
SmoothRedSandstoneSlab,
SmoothRedSandstoneStairs,
SmoothSandstone,
SmoothSandstoneSlab,
SmoothSandstoneStairs,
SmoothStone,
SmoothStoneSlab,
Snow,
SnowBlock,
Snowball,
SoulCampfire,
SoulLantern,
SoulSand,
SoulSoil,
SoulTorch,
Spawner,
SpectralArrow,
SpiderEye,
SpiderSpawnEgg,
SplashPotion,
Sponge,
SpruceBoat,
SpruceButton,
SpruceDoor,
SpruceFence,
SpruceFenceGate,
SpruceLeaves,
SpruceLog,
SprucePlanks,
SprucePressurePlate,
SpruceSapling,
SpruceSign,
SpruceSlab,
SpruceStairs,
SpruceTrapdoor,
SpruceWood,
SquidSpawnEgg,
Stick,
StickyPiston,
Stone,
StoneAxe,
StoneBrickSlab,
StoneBrickStairs,
StoneBrickWall,
StoneBricks,
StoneButton,
StoneHoe,
StonePickaxe,
StonePressurePlate,
StoneShovel,
StoneSlab,
StoneStairs,
StoneSword,
Stonecutter,
StraySpawnEgg,
StriderSpawnEgg,
String,
StrippedAcaciaLog,
StrippedAcaciaWood,
StrippedBirchLog,
StrippedBirchWood,
StrippedCrimsonHyphae,
StrippedCrimsonStem,
StrippedDarkOakLog,
StrippedDarkOakWood,
StrippedJungleLog,
StrippedJungleWood,
StrippedOakLog,
StrippedOakWood,
StrippedSpruceLog,
StrippedSpruceWood,
StrippedWarpedHyphae,
StrippedWarpedStem,
StructureBlock,
StructureVoid,
Sugar,
SugarCane,
Sunflower,
SuspiciousStew,
SweetBerries,
TallGrass,
Target,
Terracotta,
TippedArrow,
TNT,
TNTMinecart,
Torch,
TotemOfUndying,
TraderLlamaSpawnEgg,
TrappedChest,
Trident,
TripwireHook,
TropicalFish,
TropicalFishBucket,
TropicalFishSpawnEgg,
TubeCoral,
TubeCoralBlock,
TubeCoralFan,
TurtleEgg,
TurtleHelmet,
TurtleSpawnEgg,
TwistingVines,
VexSpawnEgg,
VillagerSpawnEgg,
VindicatorSpawnEgg,
Vine,
WanderingTraderSpawnEgg,
WarpedButton,
WarpedDoor,
WarpedFence,
WarpedFenceGate,
WarpedFungus,
WarpedFungusOnA_stick,
WarpedHyphae,
WarpedNylium,
WarpedPlanks,
WarpedPressurePlate,
WarpedRoots,
WarpedSign,
WarpedSlab,
WarpedStairs,
WarpedStem,
WarpedTrapdoor,
WarpedWartBlock,
WaterBucket,
WeepingVines,
WetSponge,
Wheat,
WheatSeeds,
WhiteBanner,
WhiteBed,
WhiteCarpet,
WhiteConcrete,
WhiteConcretePowder,
WhiteDye,
WhiteGlazedTerracotta,
WhiteShulkerBox,
WhiteStainedGlass,
WhiteStainedGlassPane,
WhiteTerracotta,
WhiteTulip,
WhiteWool,
WitchSpawnEgg,
WitherRose,
WitherSkeletonSkull,
WitherSkeletonSpawnEgg,
WolfSpawnEgg,
WoodenAxe,
WoodenHoe,
WoodenPickaxe,
WoodenShovel,
WoodenSword,
WritableBook,
WrittenBook,
YellowBanner,
YellowBed,
YellowCarpet,
YellowConcrete,
YellowConcretePowder,
YellowDye,
YellowGlazedTerracotta,
YellowShulkerBox,
YellowStainedGlass,
YellowStainedGlassPane,
YellowTerracotta,
YellowWool,
ZoglinSpawnEgg,
ZombieHead,
ZombieHorseSpawnEgg,
ZombieSpawnEgg,
ZombieVillagerSpawnEgg,
ZombiePigmanSpawnEgg
};

View File

@ -195,8 +195,6 @@ void cRoot::Start(std::unique_ptr<cSettingsRepositoryInterface> a_OverridesRepo)
// cClientHandle::FASTBREAK_PERCENTAGE = settingsRepo->GetValueSetI("AntiCheat", "FastBreakPercentage", 97) / 100.0f;
cClientHandle::FASTBREAK_PERCENTAGE = 0; // AntiCheat disabled due to bugs. We will enabled it once they are fixed. See #3506.
LoadPalettes(settingsRepo->GetValueSet("Folders", "ProtocolPalettes", "Protocol"));
m_MojangAPI = new cMojangAPI;
bool ShouldAuthenticate = settingsRepo->GetValueSetB("Authentication", "Authenticate", true);
m_MojangAPI->Start(*settingsRepo, ShouldAuthenticate); // Mojang API needs to be started before plugins, so that plugins may use it for DB upgrades on server init