*/
struct CraftInput
{
- CraftMethod method;
- unsigned int width;
+ CraftMethod method = CRAFT_METHOD_NORMAL;
+ unsigned int width = 0;
std::vector<ItemStack> items;
- CraftInput():
- method(CRAFT_METHOD_NORMAL), width(0), items()
- {}
+ CraftInput() {}
+
CraftInput(CraftMethod method_, unsigned int width_,
const std::vector<ItemStack> &items_):
method(method_), width(width_), items(items_)
{}
+
std::string dump() const;
};
struct CraftOutput
{
// Used for normal crafting and cooking, itemstring
- std::string item;
+ std::string item = "";
// Used for cooking (cook time) and fuel (burn time), seconds
- float time;
+ float time = 0.0f;
- CraftOutput():
- item(""), time(0)
- {}
- CraftOutput(std::string item_, float time_):
+ CraftOutput() {}
+
+ CraftOutput(const std::string &item_, float time_):
item(item_), time(time_)
{}
std::string dump() const;
CraftReplacements():
pairs()
{}
- CraftReplacements(std::vector<std::pair<std::string, std::string> > pairs_):
+ CraftReplacements(const std::vector<std::pair<std::string, std::string> > &pairs_):
pairs(pairs_)
{}
std::string dump() const;
- void serialize(std::ostream &os) const;
- void deSerialize(std::istream &is);
};
/*
CraftDefinition(){}
virtual ~CraftDefinition(){}
- void serialize(std::ostream &os) const;
- static CraftDefinition* deSerialize(std::istream &is);
-
// Returns type of crafting definition
virtual std::string getName() const=0;
// the inverse of the above
virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const=0;
// Decreases count of every input item
- virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const=0;
+ virtual void decrementInput(CraftInput &input,
+ std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const=0;
virtual CraftHashType getHashType() const = 0;
virtual u64 getHash(CraftHashType type) const = 0;
virtual void initHash(IGameDef *gamedef) = 0;
virtual std::string dump() const=0;
-protected:
- virtual void serializeBody(std::ostream &os) const=0;
- virtual void deSerializeBody(std::istream &is, int version)=0;
};
/*
class CraftDefinitionShaped: public CraftDefinition
{
public:
- CraftDefinitionShaped():
- output(""), width(1), recipe(), hash_inited(false), replacements()
- {}
+ CraftDefinitionShaped() {}
+
CraftDefinitionShaped(
const std::string &output_,
unsigned int width_,
const std::vector<std::string> &recipe_,
const CraftReplacements &replacements_):
output(output_), width(width_), recipe(recipe_),
- hash_inited(false), replacements(replacements_)
+ replacements(replacements_)
{}
virtual ~CraftDefinitionShaped(){}
virtual bool check(const CraftInput &input, IGameDef *gamedef) const;
virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const;
virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const;
- virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const;
+ virtual void decrementInput(CraftInput &input,
+ std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const;
virtual CraftHashType getHashType() const;
virtual u64 getHash(CraftHashType type) const;
virtual std::string dump() const;
-protected:
- virtual void serializeBody(std::ostream &os) const;
- virtual void deSerializeBody(std::istream &is, int version);
-
private:
// Output itemstring
- std::string output;
+ std::string output = "";
// Width of recipe
- unsigned int width;
+ unsigned int width = 1;
// Recipe matrix (itemstrings)
std::vector<std::string> recipe;
// Recipe matrix (item names)
std::vector<std::string> recipe_names;
// bool indicating if initHash has been called already
- bool hash_inited;
+ bool hash_inited = false;
// Replacement items for decrementInput()
CraftReplacements replacements;
};
virtual bool check(const CraftInput &input, IGameDef *gamedef) const;
virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const;
virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const;
- virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const;
+ virtual void decrementInput(CraftInput &input,
+ std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const;
virtual CraftHashType getHashType() const;
virtual u64 getHash(CraftHashType type) const;
virtual std::string dump() const;
-protected:
- virtual void serializeBody(std::ostream &os) const;
- virtual void deSerializeBody(std::istream &is, int version);
-
private:
// Output itemstring
std::string output;
virtual bool check(const CraftInput &input, IGameDef *gamedef) const;
virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const;
virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const;
- virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const;
+ virtual void decrementInput(CraftInput &input,
+ std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const;
virtual CraftHashType getHashType() const { return CRAFT_HASH_TYPE_COUNT; }
virtual u64 getHash(CraftHashType type) const { return 2; }
virtual std::string dump() const;
-protected:
- virtual void serializeBody(std::ostream &os) const;
- virtual void deSerializeBody(std::istream &is, int version);
-
private:
// This is a constant that is added to the wear of the result.
// May be positive or negative, allowed range [-1,1].
virtual bool check(const CraftInput &input, IGameDef *gamedef) const;
virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const;
virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const;
- virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const;
+ virtual void decrementInput(CraftInput &input,
+ std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const;
virtual CraftHashType getHashType() const;
virtual u64 getHash(CraftHashType type) const;
virtual std::string dump() const;
-protected:
- virtual void serializeBody(std::ostream &os) const;
- virtual void deSerializeBody(std::istream &is, int version);
-
private:
// Output itemstring
std::string output;
CraftDefinitionFuel():
recipe(""), hash_inited(false), burntime()
{}
- CraftDefinitionFuel(std::string recipe_,
+ CraftDefinitionFuel(const std::string &recipe_,
float burntime_,
const CraftReplacements &replacements_):
- recipe(recipe_), hash_inited(false), burntime(burntime_), replacements(replacements_)
+ recipe(recipe_),
+ hash_inited(false),
+ burntime(burntime_),
+ replacements(replacements_)
{}
virtual ~CraftDefinitionFuel(){}
virtual bool check(const CraftInput &input, IGameDef *gamedef) const;
virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const;
virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const;
- virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const;
+ virtual void decrementInput(CraftInput &input,
+ std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const;
virtual CraftHashType getHashType() const;
virtual u64 getHash(CraftHashType type) const;
virtual std::string dump() const;
-protected:
- virtual void serializeBody(std::ostream &os) const;
- virtual void deSerializeBody(std::istream &is, int version);
-
private:
// Recipe itemstring
std::string recipe;
// The main crafting function
virtual bool getCraftResult(CraftInput &input, CraftOutput &output,
+ std::vector<ItemStack> &output_replacements,
bool decrementInput, IGameDef *gamedef) const=0;
virtual std::vector<CraftDefinition*> getCraftRecipes(CraftOutput &output,
IGameDef *gamedef, unsigned limit=0) const=0;
-
+
// Print crafting recipes for debugging
virtual std::string dump() const=0;
};
// The main crafting function
virtual bool getCraftResult(CraftInput &input, CraftOutput &output,
+ std::vector<ItemStack> &output_replacements,
bool decrementInput, IGameDef *gamedef) const=0;
- virtual std::vector<CraftDefinition*> getCraftRecipes(CraftOutput &output,
+ virtual std::vector<CraftDefinition*> getCraftRecipes(CraftOutput &output,
IGameDef *gamedef, unsigned limit=0) const=0;
+ virtual bool clearCraftRecipesByOutput(const CraftOutput &output, IGameDef *gamedef) = 0;
+ virtual bool clearCraftRecipesByInput(CraftMethod craft_method,
+ unsigned int craft_grid_width, const std::vector<std::string> &recipe, IGameDef *gamedef) = 0;
+
// Print crafting recipes for debugging
virtual std::string dump() const=0;