36 lines
1.3 KiB
C++
36 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include "../CraftingRecipes.h"
|
|
#include <optional>
|
|
|
|
/**
|
|
The RecipeMapper handles the translation of crafting recipes into protocol
|
|
specific recipe Ids.
|
|
The crafting recipes are identified by the RecipeId.
|
|
The actual configuration is stored in the protocol specific configuration
|
|
directory, e.g. `Server/Protocol/1.12.2/base.recipes.txt`
|
|
*/
|
|
class cRecipeMapper
|
|
{
|
|
public:
|
|
cRecipeMapper(void);
|
|
~cRecipeMapper();
|
|
|
|
/** Translates the cuberite RecipeId to the protocol specific RecipeId */
|
|
std::optional<UInt32> GetProtocolRecipeId(UInt32 a_RecipeId, UInt32 a_ProtocolVersion);
|
|
|
|
/** Translates the protocol specific RecipeId to the cuberite RecipeId */
|
|
std::optional<UInt32> GetCuberiteRecipeId(UInt32 a_ProtocolRecipeId, UInt32 a_ProtocolVersion);
|
|
|
|
private:
|
|
/** A mapping for each protocol from the protocol specific RecipeId and the cuberite RecipeId */
|
|
std::map<AString, std::map<UInt32, UInt32>> m_ProtocolVersionMap;
|
|
|
|
/** Load Recipes from the protocol specific mapping file */
|
|
void loadRecipes(const AString & a_ProtocolVersion);
|
|
|
|
/** Handles a single line of the protocol specific mapping file */
|
|
void AddRecipeLine(const AString & a_ProtocolVersion, int a_LineNum, const AString & a_RecipeLine, const std::map<AString, UInt32> & a_RecipeNameMap);
|
|
|
|
};
|