project(protocolCraft)

set(protocolCraft_PUBLIC_HDR
    include/protocolCraft/AllClientboundMessages.hpp
    include/protocolCraft/AllMessages.hpp
    include/protocolCraft/AllServerboundMessages.hpp
    include/protocolCraft/BaseMessage.hpp
    include/protocolCraft/BinaryReadWrite.hpp
    include/protocolCraft/enums.hpp
    include/protocolCraft/GenericHandler.hpp
    include/protocolCraft/Handler.hpp
    include/protocolCraft/Message.hpp
    include/protocolCraft/MessageFactory.hpp
    include/protocolCraft/NetworkType.hpp

    include/protocolCraft/Messages/Handshaking/Serverbound/ServerboundClientIntentionPacket.hpp


    include/protocolCraft/Messages/Login/Clientbound/ClientboundCustomQueryPacket.hpp
    include/protocolCraft/Messages/Login/Clientbound/ClientboundGameProfilePacket.hpp
    include/protocolCraft/Messages/Login/Clientbound/ClientboundHelloPacket.hpp
    include/protocolCraft/Messages/Login/Clientbound/ClientboundLoginCompressionPacket.hpp
    include/protocolCraft/Messages/Login/Clientbound/ClientboundLoginDisconnectPacket.hpp

    include/protocolCraft/Messages/Login/Serverbound/ServerboundCustomQueryAnswerPacket.hpp
    include/protocolCraft/Messages/Login/Serverbound/ServerboundCustomQueryPacket.hpp
    include/protocolCraft/Messages/Login/Serverbound/ServerboundHelloPacket.hpp
    include/protocolCraft/Messages/Login/Serverbound/ServerboundKeyPacket.hpp
    include/protocolCraft/Messages/Login/Serverbound/ServerboundLoginAcknowledgedPacket.hpp


    include/protocolCraft/Messages/Play/Clientbound/ClientboundAddEntityPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundAddExperienceOrbPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundAddGlobalEntityPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundAddMobPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundAddPaintingPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundAddPlayerPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundAddVibrationSignalPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundAnimatePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundAwardStatsPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundBlockBreakAckPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundBlockChangedAckPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundBlockDestructionPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundBlockEntityDataPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundBlockEventPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundBlockUpdatePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundBossEventPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundBundlePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundChangeDifficultyPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundChatPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundChatPreviewPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundChunkBatchFinishedPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundChunkBatchStartPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundChunksBiomesPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundClearTitlesPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundCommandsPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundCommandSuggestionsPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundContainerAckPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundContainerClosePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundContainerSetContentPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundContainerSetDataPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundContainerSetSlotPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundCooldownPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundCustomChatCompletionsPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundCustomPayloadPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundCustomSoundPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundDamageEventPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundDeleteChatPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundDisconnectPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundDisguisedChatPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundEntityEventPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundExplodePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundForgetLevelChunkPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundGameEventPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundHorseScreenOpenPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundHurtAnimationPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundInitializeBorderPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundKeepAlivePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundLevelChunkPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundLevelChunkWithLightPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundLevelEventPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundLevelParticlesPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundLightUpdatePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundLoginPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundMapItemDataPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundMerchantOffersPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundMoveEntityPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundMoveEntityPacketPos.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundMoveEntityPacketPosRot.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundMoveEntityPacketRot.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundMoveVehiclePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundOpenBookPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundOpenScreenPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundOpenSignEditorPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPingPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlaceGhostRecipePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlayerAbilitiesPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlayerChatHeaderPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlayerChatPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlayerCombatEndPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlayerCombatEnterPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlayerCombatKillPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlayerCombatPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlayerInfoPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlayerInfoRemovePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlayerInfoUpdatePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlayerLookAtPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPlayerPositionPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundPongResponsePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundRecipePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundRemoveEntitiesPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundRemoveEntityPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundRemoveMobEffectPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundResourcePackPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundResetScorePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundResourcePackPopPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundResourcePackPushPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundRespawnPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundRotateHeadPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSectionBlocksUpdatePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSelectAdvancementsTabPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundServerDataPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetActionBarTextPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetBorderCenterPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetBorderLerpSizePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetBorderPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetBorderSizePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetBorderWarningDelayPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetBorderWarningDistancePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetCameraPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetCarriedItemPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetChunkCacheCenterPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetChunkCacheRadiusPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetDefaultSpawnPositionPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetDisplayChatPreviewPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetDisplayObjectivePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetEntityDataPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetEntityLinkPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetEntityMotionPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetEquipmentPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetExperiencePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetHealthPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetObjectivePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetPassengersPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetPlayerTeamPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetScorePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetSimulationDistancePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetSubtitleTextPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetTimePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetTitlesAnimationPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetTitlesPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSetTitleTextPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSoundEntityPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSoundPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundStartConfigurationPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundStopSoundPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundSystemChatPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundTabListPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundTagQueryPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundTakeItemEntityPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundTeleportEntityPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundTickingStatePacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundTickingStepPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundUpdateAdvancementsPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundUpdateAttributesPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundUpdateEnabledFeaturesPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundUpdateMobEffectPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundUpdateRecipesPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundUpdateTagsPacket.hpp
    include/protocolCraft/Messages/Play/Clientbound/ClientboundUseBedPacket.hpp

    include/protocolCraft/Messages/Play/Serverbound/ServerboundAcceptTeleportationPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundBlockEntityTagQuery.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundChangeDifficultyPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundChatAckPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundChatCommandPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundChatPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundChatPreviewPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundChatSessionUpdatePacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundChunkBatchReceivedPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundClientCommandPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundClientInformationPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundCommandSuggestionPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundConfigurationAcknowledgedPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundContainerAckPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundContainerButtonClickPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundContainerClickPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundContainerClosePacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundContainerSlotStateChangedPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundCustomPayloadPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundEditBookPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundEnchantItemPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundEntityTagQuery.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundInteractPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundJigsawGeneratePacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundKeepAlivePacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundLockDifficultyPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundMovePlayerPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundMovePlayerPacketPos.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundMovePlayerPacketPosRot.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundMovePlayerPacketRot.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundMovePlayerPacketStatusOnly.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundMoveVehiclePacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundPaddleBoatPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundPickItemPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundPingRequestPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundPlaceRecipePacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundPlayerAbilitiesPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundPlayerActionPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundPlayerCommandPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundPlayerInputPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundPongPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundRecipeBookChangeSettingsPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundRecipeBookSeenRecipePacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundRecipeBookUpdatePacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundRenameItemPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundResourcePackPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundSeenAdvancementsPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundSelectTradePacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundSetBeaconPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundSetCarriedItemPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundSetCommandBlockPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundSetCommandMinecartPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundSetCreativeModeSlotPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundSetJigsawBlockPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundSetStructureBlockPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundSignUpdatePacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundSwingPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundTeleportToEntityPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundUseItemOnPacket.hpp
    include/protocolCraft/Messages/Play/Serverbound/ServerboundUseItemPacket.hpp


    include/protocolCraft/Messages/Status/Clientbound/ClientboundPongResponsePacket.hpp
    include/protocolCraft/Messages/Status/Clientbound/ClientboundStatusResponsePacket.hpp

    include/protocolCraft/Messages/Status/Serverbound/ServerboundPingRequestPacket.hpp
    include/protocolCraft/Messages/Status/Serverbound/ServerboundStatusRequestPacket.hpp


    include/protocolCraft/Messages/Configuration/Clientbound/ClientboundCustomPayloadPacket.hpp
    include/protocolCraft/Messages/Configuration/Clientbound/ClientboundDisconnectPacket.hpp
    include/protocolCraft/Messages/Configuration/Clientbound/ClientboundFinishConfigurationPacket.hpp
    include/protocolCraft/Messages/Configuration/Clientbound/ClientboundKeepAlivePacket.hpp
    include/protocolCraft/Messages/Configuration/Clientbound/ClientboundPingPacket.hpp
    include/protocolCraft/Messages/Configuration/Clientbound/ClientboundRegistryDataPacket.hpp
    include/protocolCraft/Messages/Configuration/Clientbound/ClientboundResourcePackPacket.hpp
    include/protocolCraft/Messages/Configuration/Clientbound/ClientboundResourcePackPopConfigurationPacket.hpp
    include/protocolCraft/Messages/Configuration/Clientbound/ClientboundResourcePackPushConfigurationPacket.hpp
    include/protocolCraft/Messages/Configuration/Clientbound/ClientboundUpdateEnabledFeaturesPacket.hpp
    include/protocolCraft/Messages/Configuration/Clientbound/ClientboundUpdateTagsPacket.hpp

    include/protocolCraft/Messages/Configuration/Serverbound/ServerboundClientInformationPacket.hpp
    include/protocolCraft/Messages/Configuration/Serverbound/ServerboundCustomPayloadPacket.hpp
    include/protocolCraft/Messages/Configuration/Serverbound/ServerboundFinishConfigurationPacket.hpp
    include/protocolCraft/Messages/Configuration/Serverbound/ServerboundKeepAlivePacket.hpp
    include/protocolCraft/Messages/Configuration/Serverbound/ServerboundPongPacket.hpp
    include/protocolCraft/Messages/Configuration/Serverbound/ServerboundResourcePackPacket.hpp


    include/protocolCraft/Types/Advancement.hpp
    include/protocolCraft/Types/AdvancementDisplay.hpp
    include/protocolCraft/Types/AdvancementProgress.hpp
    include/protocolCraft/Types/BlockEntityInfo.hpp
    include/protocolCraft/Types/BlockEntityTag.hpp
    include/protocolCraft/Types/ChunkBiomeData.hpp
    include/protocolCraft/Types/ChunkPos.hpp
    include/protocolCraft/Types/ClientboundLevelChunkPacketData.hpp
    include/protocolCraft/Types/ClientboundLightUpdatePacketData.hpp
    include/protocolCraft/Types/ClientInformation.hpp
    include/protocolCraft/Types/CommonPlayerSpawnInfo.hpp
    include/protocolCraft/Types/CriterionProgress.hpp
    include/protocolCraft/Types/EntityModifierData.hpp
    include/protocolCraft/Types/EntityProperty.hpp
    include/protocolCraft/Types/GlobalPos.hpp
    include/protocolCraft/Types/Identifier.hpp
    include/protocolCraft/Types/MapDecoration.hpp
    include/protocolCraft/Types/NetworkPosition.hpp
    include/protocolCraft/Types/PlayerUpdate.hpp
    include/protocolCraft/Types/Record.hpp
    include/protocolCraft/Types/SaltSignature.hpp
    include/protocolCraft/Types/Slot.hpp
    include/protocolCraft/Types/Trade.hpp

    include/protocolCraft/Types/Chat/Chat.hpp
    include/protocolCraft/Types/Chat/ChatMessageContent.hpp
    include/protocolCraft/Types/Chat/ChatSender.hpp
    include/protocolCraft/Types/Chat/ChatTypeBoundNetwork.hpp
    include/protocolCraft/Types/Chat/FilterMask.hpp
    include/protocolCraft/Types/Chat/LastSeenMessagesEntry.hpp
    include/protocolCraft/Types/Chat/LastSeenMessagesUpdate.hpp
    include/protocolCraft/Types/Chat/NumberFormat.hpp
    include/protocolCraft/Types/Chat/PlayerChatMessage.hpp
    include/protocolCraft/Types/Chat/RemoteChatSessionData.hpp
    include/protocolCraft/Types/Chat/SignedMessageHeader.hpp
    include/protocolCraft/Types/Chat/SignedMessageBody.hpp

    include/protocolCraft/Types/CommandNode/BrigadierProperty.hpp
    include/protocolCraft/Types/CommandNode/BrigadierPropertyDouble.hpp
    include/protocolCraft/Types/CommandNode/BrigadierPropertyEntity.hpp
    include/protocolCraft/Types/CommandNode/BrigadierPropertyFloat.hpp
    include/protocolCraft/Types/CommandNode/BrigadierPropertyInteger.hpp
    include/protocolCraft/Types/CommandNode/BrigadierPropertyLong.hpp
    include/protocolCraft/Types/CommandNode/BrigadierPropertyNone.hpp
    include/protocolCraft/Types/CommandNode/BrigadierPropertyRange.hpp
    include/protocolCraft/Types/CommandNode/BrigadierPropertyResourceOrTag.hpp
    include/protocolCraft/Types/CommandNode/BrigadierPropertyScoreHolder.hpp
    include/protocolCraft/Types/CommandNode/BrigadierPropertyString.hpp
    include/protocolCraft/Types/CommandNode/BrigadierPropertyTime.hpp
    include/protocolCraft/Types/CommandNode/CommandNode.hpp

    include/protocolCraft/Types/GameProfile/GameProfile.hpp
    include/protocolCraft/Types/GameProfile/GameProfileProperty.hpp
    include/protocolCraft/Types/GameProfile/ProfilePublicKey.hpp

    include/protocolCraft/Types/NBT/NBT.hpp
    include/protocolCraft/Types/NBT/Tag.hpp

    include/protocolCraft/Types/Particles/BlockcrackParticle.hpp
    include/protocolCraft/Types/Particles/BlockdustParticle.hpp
    include/protocolCraft/Types/Particles/BlockMarkerParticle.hpp
    include/protocolCraft/Types/Particles/BlockParticle.hpp
    include/protocolCraft/Types/Particles/DustColorTransitionParticle.hpp
    include/protocolCraft/Types/Particles/DustParticle.hpp
    include/protocolCraft/Types/Particles/FallingDustParticle.hpp
    include/protocolCraft/Types/Particles/IconcrackParticle.hpp
    include/protocolCraft/Types/Particles/ItemParticle.hpp
    include/protocolCraft/Types/Particles/NoDataTypedParticle.hpp
    include/protocolCraft/Types/Particles/Particle.hpp
    include/protocolCraft/Types/Particles/SculkChargeParticle.hpp
    include/protocolCraft/Types/Particles/ShriekParticle.hpp
    include/protocolCraft/Types/Particles/VibrationParticle.hpp

    include/protocolCraft/Types/Recipes/Ingredient.hpp
    include/protocolCraft/Types/Recipes/Recipe.hpp
    include/protocolCraft/Types/Recipes/RecipeBookSettings.hpp
    include/protocolCraft/Types/Recipes/RecipeTypeData.hpp
    include/protocolCraft/Types/Recipes/RecipeTypeDataBlasting.hpp
    include/protocolCraft/Types/Recipes/RecipeTypeDataCampfireCooking.hpp
    include/protocolCraft/Types/Recipes/RecipeTypeDataNone.hpp
    include/protocolCraft/Types/Recipes/RecipeTypeDataShaped.hpp
    include/protocolCraft/Types/Recipes/RecipeTypeDataShapeless.hpp
    include/protocolCraft/Types/Recipes/RecipeTypeDataSmelting.hpp
    include/protocolCraft/Types/Recipes/RecipeTypeDataSmithing.hpp
    include/protocolCraft/Types/Recipes/RecipeTypeDataSmithingTransform.hpp
    include/protocolCraft/Types/Recipes/RecipeTypeDataSmithingTrim.hpp
    include/protocolCraft/Types/Recipes/RecipeTypeDataSmoking.hpp
    include/protocolCraft/Types/Recipes/RecipeTypeDataStoneCutting.hpp

    include/protocolCraft/Types/Sound/SoundEvent.hpp

    include/protocolCraft/Types/Vibrations/BlockPositionSource.hpp
    include/protocolCraft/Types/Vibrations/EntityPositionSource.hpp
    include/protocolCraft/Types/Vibrations/PositionSource.hpp
    include/protocolCraft/Types/Vibrations/VibrationPath.hpp

    include/protocolCraft/Utilities/GZip.hpp
    include/protocolCraft/Utilities/Json.hpp
    include/protocolCraft/Utilities/RecursiveWrapper.hpp
    include/protocolCraft/Utilities/TupleCat.hpp

    include/protocolCraft/Utilities/Plugins/PluginLoader.hpp
    include/protocolCraft/Utilities/Plugins/PluginObject.hpp
)

set(protocolCraft_SRC
    src/BaseMessage.cpp
    src/BinaryReadWrite.cpp
    src/MessageFactory.cpp

    src/Types/Chat/Chat.cpp

    src/Types/CommandNode/BrigadierProperty.cpp

    src/Types/NBT/NBT.cpp
    src/Types/NBT/Tag.cpp

    src/Types/Particles/BlockcrackParticle.cpp
    src/Types/Particles/BlockdustParticle.cpp
    src/Types/Particles/BlockMarkerParticle.cpp
    src/Types/Particles/BlockParticle.cpp
    src/Types/Particles/DustColorTransitionParticle.cpp
    src/Types/Particles/DustParticle.cpp
    src/Types/Particles/FallingDustParticle.cpp
    src/Types/Particles/IconcrackParticle.cpp
    src/Types/Particles/ItemParticle.cpp
    src/Types/Particles/NoDataTypedParticle.cpp
    src/Types/Particles/Particle.cpp
    src/Types/Particles/SculkChargeParticle.cpp
    src/Types/Particles/ShriekParticle.cpp
    src/Types/Particles/VibrationParticle.cpp

    src/Types/Recipes/RecipeTypeData.cpp

    src/Types/Vibrations/PositionSource.cpp

    src/Utilities/GZip.cpp
    src/Utilities/Json.cpp

    src/Utilities/Plugins/PluginLoader.cpp
)

# To have a nice files structure in Visual Studio
if(MSVC)
    foreach(source IN LISTS protocolCraft_PUBLIC_HDR)
        get_filename_component(source_path_header "${source}" PATH)
        string(REPLACE "include/protocolCraft" "Header Files/public" source_path_header "${source_path_header}")
        string(REPLACE "/" "\\" source_path_msvc "${source_path_header}")
        source_group("${source_path_msvc}" FILES "${source}")
    endforeach()

    foreach(source IN LISTS protocolCraft_SRC)
        get_filename_component(source_path "${source}" PATH)
        string(REPLACE "src" "Source Files" source_path "${source_path}")
        string(REPLACE "/" "\\" source_path_msvc "${source_path}")
        source_group("${source_path_msvc}" FILES "${source}")
    endforeach()
endif()

if(PROTOCOLCRAFT_STATIC)
    add_library(protocolCraft STATIC ${protocolCraft_SRC} ${protocolCraft_PUBLIC_HDR})
else()
    add_library(protocolCraft SHARED ${protocolCraft_SRC} ${protocolCraft_PUBLIC_HDR})
endif(PROTOCOLCRAFT_STATIC)
set_property(TARGET protocolCraft PROPERTY CXX_STANDARD 17)
set_property(TARGET protocolCraft PROPERTY POSITION_INDEPENDENT_CODE ON)
set_target_properties(protocolCraft PROPERTIES DEBUG_POSTFIX "_d")
set_target_properties(protocolCraft PROPERTIES RELWITHDEBINFO_POSTFIX "_rd")

if(MSVC)
    # To avoid having folder for each configuration when building with Visual
    set_target_properties(protocolCraft PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${BOTCRAFT_OUTPUT_DIR}/bin")
    set_target_properties(protocolCraft PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${BOTCRAFT_OUTPUT_DIR}/bin")
    set_target_properties(protocolCraft PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${BOTCRAFT_OUTPUT_DIR}/bin")
    set_target_properties(protocolCraft PROPERTIES RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${BOTCRAFT_OUTPUT_DIR}/bin")
    set_target_properties(protocolCraft PROPERTIES LIBRARY_OUTPUT_DIRECTORY_DEBUG "${BOTCRAFT_OUTPUT_DIR}/bin")
    set_target_properties(protocolCraft PROPERTIES LIBRARY_OUTPUT_DIRECTORY_RELEASE "${BOTCRAFT_OUTPUT_DIR}/bin")
    set_target_properties(protocolCraft PROPERTIES LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${BOTCRAFT_OUTPUT_DIR}/bin")
    set_target_properties(protocolCraft PROPERTIES LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL "${BOTCRAFT_OUTPUT_DIR}/bin")
    set_target_properties(protocolCraft PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${BOTCRAFT_OUTPUT_DIR}/lib")
    set_target_properties(protocolCraft PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${BOTCRAFT_OUTPUT_DIR}/lib")
    set_target_properties(protocolCraft PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${BOTCRAFT_OUTPUT_DIR}/lib")
    set_target_properties(protocolCraft PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL "${BOTCRAFT_OUTPUT_DIR}/lib")
else()
    set_target_properties(protocolCraft PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${BOTCRAFT_OUTPUT_DIR}/bin")
    set_target_properties(protocolCraft PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${BOTCRAFT_OUTPUT_DIR}/bin")
    set_target_properties(protocolCraft PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${BOTCRAFT_OUTPUT_DIR}/lib")
endif(MSVC)

if (MSVC)
    target_compile_options(protocolCraft PRIVATE "$<$<CONFIG:Debug>:/bigobj>")
endif (MSVC)

# Set version
target_compile_definitions(protocolCraft PUBLIC PROTOCOL_VERSION=${PROTOCOL_VERSION})

# Add include folders
target_include_directories(protocolCraft
    PUBLIC
        "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
        "$<INSTALL_INTERFACE:include>"
)

if(BOTCRAFT_COMPRESSION)
    target_link_libraries(protocolCraft PRIVATE ZLIB::ZLIB)
    target_compile_definitions(protocolCraft PRIVATE USE_COMPRESSION=1)
endif(BOTCRAFT_COMPRESSION)

# Add DL lib for linux compilation
target_link_libraries(protocolCraft PUBLIC ${CMAKE_DL_LIBS})

# Installation stuff
include(GNUInstallDirs)

install(TARGETS protocolCraft
    EXPORT protocolCraft-targets
    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
    LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR}"
    RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
)

install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/protocolCraft"
    DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)

install(EXPORT protocolCraft-targets
    # lowercase as required by find_package
    FILE protocolcraft-targets.cmake
    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/protocolCraft"
)

include(CMakePackageConfigHelpers)

configure_package_config_file(
    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/protocolCraft-config.cmake.in"
    # lowercase as required by find_package
    "${CMAKE_CURRENT_BINARY_DIR}/cmake/protocolcraft-config.cmake"
    INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/protocolCraft"
)

install(
    FILES
        "${CMAKE_CURRENT_BINARY_DIR}/cmake/protocolcraft-config.cmake"
    DESTINATION
        "${CMAKE_INSTALL_LIBDIR}/cmake/protocolCraft"
)

export(EXPORT protocolCraft-targets
    # lowercase as required by find_package
    FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/protocolcraft-targets.cmake"
)
